引言
在做winform項目中,數據控件DataGridView的使用多多少少是會用到的,如果不設置它的屬性,默認情況下是不會自適應寬度的,你想查看某項的數據,就不得不將標題欄拖來拖去,挺煩的。
方法
建一個用於測試的Person類
1 public class Person 2 { 3 [Description("姓名")] 4 public string Name { get; set; } 5 [Description("性別")] 6 public string Gender { get; set; } 7 [Description("地址")] 8 public string Address { get; set; } 9 }
winform綁定數據源,及自適應列寬代碼
1 public partial class PersonInfoForm : Form 2 { 3 public PersonInfoForm() 4 { 5 InitializeComponent(); 6 } 7 int width = 0; 8 private void PersonInfoForm_Load(object sender, EventArgs e) 9 { 10 List<Person> list = new List<Person>() { 11 new Person(){Name="張三",Gender="男",Address="北京市 海淀區 大鍾寺"}, 12 new Person(){Name="李斯",Gender="男",Address="上海市"}, 13 new Person(){Name="王二",Gender="女",Address="河南省 鄭州市 二七廣場附近"}, 14 new Person(){Name="王二",Gender="女",Address="河南省 鄭州市 "}, 15 new Person(){Name="王二",Gender="女",Address="河南省"} 16 }; 17 //綁定數據源的做法和原來相同 18 dgViewPersons.DataSource = list; 19 //對於DataGridView的每一個列都調整 20 for (int i = 0; i < this.dgViewPersons.Columns.Count; i++) 21 { 22 //將每一列都調整為自動適應模式 23 this.dgViewPersons.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells); 24 //記錄整個DataGridView的寬度 25 width += this.dgViewPersons.Columns[i].Width; 26 } 27 //判斷調整后的寬度與原來設定的寬度的關系,如果是調整后的寬度大於原來設定的寬度, 28 //則將DataGridView的列自動調整模式設置為顯示的列即可, 29 //如果是小於原來設定的寬度,將模式改為填充。 30 if (width > this.dgViewPersons.Size.Width) 31 { 32 this.dgViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; 33 } 34 else 35 { 36 this.dgViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 37 } 38 //凍結某列 從左開始 0,1,2 39 dgViewPersons.Columns[1].Frozen = true; 40 41 } 42 }
主要用到了DataGridViewAutoSizeColumnMode枚舉,也可以通過設置DataGridView的屬性來實現
1 // 摘要: 2 // 定義用於指定如何調整列寬的值。 3 public enum DataGridViewAutoSizeColumnMode 4 { 5 // 摘要: 6 // 列的大小調整行為從 System.Windows.Forms.DataGridView.AutoSizeColumnsMode 屬性繼承。 7 NotSet = 0, 8 // 9 // 摘要: 10 // 列寬不會自動調整。 11 None = 1, 12 // 13 // 摘要: 14 // 調整列寬,以適合列標題單元格的內容。 15 ColumnHeader = 2, 16 // 17 // 摘要: 18 // 調整列寬,以適合該列中的所有單元格的內容,不包括標題單元格。 19 AllCellsExceptHeader = 4, 20 // 21 // 摘要: 22 // 調整列寬,以適合該列中的所有單元格的內容,包括標題單元格。 23 AllCells = 6, 24 // 25 // 摘要: 26 // 調整列寬,以適合當前屏幕上顯示的行的列中的所有單元格的內容,不包括標題單元格。 27 DisplayedCellsExceptHeader = 8, 28 // 29 // 摘要: 30 // 調整列寬,以適合當前屏幕上顯示的行的列中的所有單元格的內容,包括標題單元格。 31 DisplayedCells = 10, 32 // 33 // 摘要: 34 // 調整列寬,使所有列的寬度正好填充控件的顯示區域,只需要水平滾動保證列寬在 System.Windows.Forms.DataGridViewColumn.MinimumWidth 35 // 屬性值以上。 相對列寬由相對 System.Windows.Forms.DataGridViewColumn.FillWeight 屬性值決定。 36 Fill = 16, 37 }
結果
沒設置自適應列寬的
使用自適應列寬的
總結
用到的東西很簡單,只是在項目中用到了,對winform使用較少,就研究上網查了一下,這樣可以提高用戶體驗,既然用到了就記錄一下,方便自己,也方便他人。
參考:
http://blog.csdn.net/ou_yangpengfei/article/details/6051701
其他網絡資源