DataGridView - 如何设置列宽?

Cap*_*mic 40 .net controls datagridview winforms

我有一个带DataGridView控件的WinForms应用程序.我的控件有五列(比如"姓名","地址","电话"等)

我对默认列宽不满意.我希望能更好地控制列外观.我想要的是能够做到以下之一:

  • 以百分比设置每列的宽度
  • 设置每列的宽度(以像素为单位)
  • 使用其他一些最好的方法(使宽度适合文本等)

请建议 - 使用哪个属性以及如何使用.

Bha*_*kar 54

您可以使用DataGridViewColumn.Width属性来执行此操作:

DataGridViewColumn column = dataGridView.Columns[0];
column.Width = 60;
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.width.aspx

  • 谢谢!我才意识到为什么它不适合我.MSDN说如果设置此属性时指定的值小于MinimumWidth属性的值,则使用MinimumWidth属性值. (2认同)
  • 是的,宽度不能直接用于 Grid 控件,因此您使用 ItemStyle.With 来设置其属性。 (2认同)

小智 30

以下也可以尝试:

DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
Run Code Online (Sandbox Code Playgroud)

或使用DataGridViewAutoSizeColumnsMode枚举中的其他设置选项

  • 使用"填充"选项时,会展开列以填充网格的整个宽度. (3认同)
  • 这是最好的答案.然后你可以调整窗体的大小以适应DataGridView的宽度.谢谢马克!这给我带来了很多麻烦. (2认同)

Mar*_*ata 22

上述大部分解决方案的假设母公司DateGridView拥有.AutoSizeMode不等于Fill.如果设置.AutoSizeMode为网格是Fill,你需要设置AutoSizeMode为每None,如果你想解决一个特定的列宽(并让其他列填写).如果更改列宽并且.AutoSizeMode不是None第一个,我发现了一个关于null对象的奇怪的MS异常.

这有效

chart.AutoSizeMode  = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;
Run Code Online (Sandbox Code Playgroud)

这会引发关于设置边框厚度的某些内部对象的null异常.

chart.AutoSizeMode  = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
 // chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;
Run Code Online (Sandbox Code Playgroud)


Jer*_*y L 12

我知道这是一个老问题,但没有人回答第一部分,设置宽度百分比. 这可以通过FillWeight(MSDN)轻松完成.如果其他人搜索到这个答案.

您可以将DataGridAutoSizeColumnMode设置为填充设计器.默认情况下,每列FillWeight为100.然后在代码隐藏,FormLoad事件或将数据绑定到网格之后,您可以简单地:

gridName.Columns[0].FillWeight = 200;
gridName.Columns[1].FillWeight = 50;
Run Code Online (Sandbox Code Playgroud)

等等,无论你想要什么比例的重量.如果您希望每个列的数字加起来为100,对于文字百分比宽度,您也可以这样做.

它提供了一个很好的完整DataGrid,其中标题使用整个空间,即使用户调整窗口大小.在宽屏上看起来不错,4:3,无论如何.


haw*_*bsl 7

关于你的最后一颗子弹

使宽度适合文本

您可以尝试使用DataGridViewColumn的.AutoSizeMode,将其设置为以下值之一:

None
AllCells
AllCellsExceptHeader
DisplayedCells
DisplayedCellsExceptHeader
ColumnHeader
Fill
Run Code Online (Sandbox Code Playgroud)

有关MSDN页面的更多信息