我正在使用 C# 开发一个表单应用程序,并且一直被 DataGridView
的宽度所困扰。
我想要实现的是:
- 通过适当调整列大小,AND,用数据完全填充
DataGridView
水平字段 - 如果更多列需要更多空间,请添加滚动条。
问题是,我不确定表中有多少列可供读取数据。
我认为我已经通过以下代码实现了要求 1 和 2:
for(int i=0; i<myDataGridView.Columns.Count; i++){
myDataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
但是,我意识到这并不能满足要求2。在需要更多列空间的地方,无法添加滚动条。如果列数多于某个值,则会隐藏部分列和数据单元格。如下图所示,关系列的“p”被隐藏并且没有滚动条:
经过一番努力,我注意到以下代码成功添加了滚动条:
for(int i=0; i<myDataGridView.Columns.Count; i++){
myDataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}
但是,现在这段代码不能满足我的第一个要求。如果需要更多空间容纳更多列,它会添加一个滚动条,但如果只有几列,它会留下未使用的区域,如下图所示(背景色为黑色):
现在我不知道如何实现这两个要求。一种方法只能满足一种要求。有人可以提前告诉我如何满足这两个要求吗?谢谢!
最佳答案
您需要设置每列的填充权重,并将其自动调整大小模式设置为Fill
,并设置它们的最小宽度,这样无论您有多少列或多窄,它们都不会被迫适应用户制作窗口。
myDataGridView.Columns[i].FillWeight = GetFillWeight(myDataGridView.Columns[i].Name);
myDataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
myDataGridView.Columns[i].MinimumWidth = (int) myDataGridView.Columns[i].FillWeight;
如果你设置了列的最小宽度,并且这些宽度加起来超过了gridview的宽度,那么gridview将获得一个滚动条。
我建议设置 FillWeight,你有一个函数,它实际上根据它是什么列进行不同的设置。类似的东西
private float GetFillWeight(string FieldName)
{
switch (FieldName)
{
case "FirstName":
case "LastName":
case "City":
return 300;
case "Sex":
return 150;
case "Age":
return 100;
关于C#:填充 DataGridView 字段的宽度并在需要时添加滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46330106/