【发布时间】:2017-10-16 19:04:56
【问题描述】:
我有一个DataGridView 控件,列数每 10 分钟根据用户的输入而变化。
需要实现的是:
-
DataGridView需要显示没有水平滚动条的所有列,除非它影响任何单元格内容的可读性。如果它开始隐藏单元格内容,则需要出现水平滚动条。 - 无论当前显示多少列,无论是否显示水平滚动条,
DataGridView数据的右侧都必须填充,以免出现未使用的空间。 - 无论单元格内容的长度如何,所有的列宽都需要相同。 (一个单元格可以有一个从 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 的解决方案在我看来是正确的。如果您的要求更改为在列上具有不同的宽度,那么我建议您查看我在此处提供的答案:horizontal scrollbar disappear setting the last column size to fill
标签: c# datagridview width