[Winform]DataGridView列⾃适应宽度
在做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绑定数据源,及⾃适应列宽代码
datagridview数据源
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,
}
没设置⾃适应列宽的
使⽤⾃适应列宽的