在做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, }
没设置自适应列宽的
使用自适应列宽的