在做winform項目中,數據控件DataGridView的使用多多少少是會用到的,如果不設置它的屬性,默認情況下是不會自適應寬度的,你想查看某項的數據,就不得不將標題欄拖來拖去,挺煩的。
建一個用於測試的Person類
public class Person { [Description("姓名")] public string Name { get; set; } [Description("性別")] public string Gender { get; set; } [Description("地址")] public string Address { get; set; } }
winform綁定數據源,及自適應列寬代碼
public partial class PersonInfoForm : Form { public PersonInfoForm() { InitializeComponent(); } int width = 0; private void PersonInfoForm_Load(object sender, EventArgs e) { List<Person> list = new List<Person>() { new Person(){Name="張三",Gender="男",Address="北京市 海淀區 大鍾寺"}, new Person(){Name="李斯",Gender="男",Address="上海市"}, new Person(){Name="王二",Gender="女",Address="河南省 鄭州市 二七廣場附近"}, new Person(){Name="王二",Gender="女",Address="河南省 鄭州市 "}, new Person(){Name="王二",Gender="女",Address="河南省"} }; //綁定數據源的做法和原來相同 dgViewPersons.DataSource = list; //對於DataGridView的每一個列都調整 for (int i = 0; i < this.dgViewPersons.Columns.Count; i++) { //將每一列都調整為自動適應模式 this.dgViewPersons.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells); //記錄整個DataGridView的寬度 width += this.dgViewPersons.Columns[i].Width; } //判斷調整后的寬度與原來設定的寬度的關系,如果是調整后的寬度大於原來設定的寬度, //則將DataGridView的列自動調整模式設置為顯示的列即可, //如果是小於原來設定的寬度,將模式改為填充。 if (width > this.dgViewPersons.Size.Width) { this.dgViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; } else { this.dgViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; } //凍結某列 從左開始 0,1,2 dgViewPersons.Columns[1].Frozen = true; } }
主要用到了DataGridViewAutoSizeColumnMode枚舉,也可以通過設置DataGridView的屬性來實現
// 摘要: // 定義用於指定如何調整列寬的值。 public enum DataGridViewAutoSizeColumnMode { // 摘要: // 列的大小調整行為從 System.Windows.Forms.DataGridView.AutoSizeColumnsMode 屬性繼承。 NotSet = 0, // // 摘要: // 列寬不會自動調整。 None = 1, // // 摘要: // 調整列寬,以適合列標題單元格的內容。 ColumnHeader = 2, // // 摘要: // 調整列寬,以適合該列中的所有單元格的內容,不包括標題單元格。 AllCellsExceptHeader = 4, // // 摘要: // 調整列寬,以適合該列中的所有單元格的內容,包括標題單元格。 AllCells = 6, // // 摘要: // 調整列寬,以適合當前屏幕上顯示的行的列中的所有單元格的內容,不包括標題單元格。 DisplayedCellsExceptHeader = 8, // // 摘要: // 調整列寬,以適合當前屏幕上顯示的行的列中的所有單元格的內容,包括標題單元格。 DisplayedCells = 10, // // 摘要: // 調整列寬,使所有列的寬度正好填充控件的顯示區域,只需要水平滾動保證列寬在 System.Windows.Forms.DataGridViewColumn.MinimumWidth // 屬性值以上。 相對列寬由相對 System.Windows.Forms.DataGridViewColumn.FillWeight 屬性值決定。 Fill = 16, }
沒設置自適應列寬的
使用自適應列寬的