我有一个DataGridView
控件,列的数目根据用户每10分钟的输入而改变。 什么需要实现的是:C#:DataGridView在右侧和滚动条上的额外空间
- 的
DataGridView
需要显示所有列没有水平滚动条,除非它影响到的任何单元格内容的可读性。如果它开始隐藏单元格内容,则需要出现水平滚动条。 - 无论当前显示多少列,也无论是否显示水平滚动条,必须填写
DataGridView
数据的右侧,以便没有未使用的空间。 - 无论单元格内容的长度如何,所有列宽都需要相同。 (A细胞可以从10到9999的整数)
所有的这3个要求,必须满足在同一时间,但如果我尽量满足一个要求,其他的(一个或多个)分崩离析。我知道无论如何总会有至少16列。如果有更多的列,这真的取决于用户。
有人能告诉我什么是错的以下?
int countVisible = 0; //Count the number of columns displayed
foreach(DataGridViewColumn col in myDGV.Columns)
if(col.Visible) countVisible++;
//By default, use Fill mode
DataGridViewAutoSizeColumnMode mode = DataGridViewAutoSizeColumnMode.Fill;
//I am trying to show up to 20 columns without a scrollbar
//A horizontal scrollbar required for more than 20 columns
//If there are more than 20 columns, use DisplayedCells mode
if(countVisible > 20)
mode = DataGridViewAutoSizeColumnMode.DisplayedCells;
//Apply the mode to all columns
for(int i = 0; i < myDGV.Columns.Count; i++)
myDGV.Columns[i].AutoSizeMode = mode;
此代码的工作,如果列的数目是小于一定值,但在比预定值大的情况下,它收缩,只有在所有的行2位数字列的宽度,违反了第3条要求。通过缩小一些列宽,它会在右侧创建额外的空间,并且违反了第2条要求。
我很迷茫和卡住。有人可以帮忙吗?任何意见将不胜感激。
没有经过测试,JohnG的解决方案对我来说看起来是正确的。如果你的需求被改变为在列上有不同的宽度,那么我建议看看我在这里提供的答案:[水平滚动条消失设置最后一个列大小填充](https:// stackoverflow。 com/a/27870091/3773066) – OhBeWise