在DataGridView可见之前,DataGridView列宽返回100

时间:2015-04-20 15:13:47

标签: c# winforms datagridview

我将DataGridView添加到TabControl的非选定选项卡,我手动调整最后 n 列的大小以填充剩余空间。前三列是静态的,使用AutoSizeMode AllCells。

我要做的是,获取DataGridView宽度并减去19为垂直滚动条,然后减去前三列的宽度,然后将剩余宽度除以 n 并为每个列分配剩余宽度。当我添加DataGridView时,我有一些输出显示(此时DataGridView不可见):

Initial Available Width: 866
Updated Available Width: 766
Updated Available Width: 666
Updated Available Width: 566
Remaing Columns Width: 94

最初的三列报告宽度为100,这是不正确的。当我转到选项卡时,DataGridView处于打开状态,并且我得到了DataGridView Resize事件:

Initial Available Width: 1074
Updated Available Width: 974
Updated Available Width: 874
Updated Available Width: 774
Remaing Columns Width: 129

仍显示前三列的宽度为100,因此,由于最后 n 列的宽度超出实际可用空间,因此水平滚动条可见。在选项卡上,我有一些测试代码来获取当前宽度:

DGV Width  : 1093
Col 1 Width: 411
Col 2 Width: 40
Col 3 Width: 36
Col 4 Width: 129
Col 5 Width: 129
Col 6 Width: 129
Col 7 Width: 129
Col 8 Width: 129
Col 9 Width: 129

所以一切都按预期工作,除了前三列未报告其真实宽度。但是,当我在激活DataGridView Resize事件的窗体上进行轻微的手动调整大小时,我得到以下内容:

Initial Available Width: 1074
Updated Available Width: 663
Updated Available Width: 623
Updated Available Width: 587
Remaing Columns Width: 97

因此,当DataGridView实际上不可见时,它无法计算AutoSizeMode AllCells的宽度?

我尝试过调用AutoResizeColumns()但它没有改变任何内容,而AutoSizeMode Fill也不符合我对最后 n 列的要求。

编辑:回复OhBeWise的评论:

我也这么认为,但经过进一步调查,它似乎与父控制更相关。我有一个带有2个选项卡的顶级选项卡控件 - 在tab2中有另一个选项卡控件,在运行时没有选项卡。当我在tab2被选中时向tab2添加一个tabpage(带有datagridview)时,即使第二,第三...... n 添加的列宽也不会立即调整比如第一个添加(我不会改变所选索引,所以它只是在第一个标签上说明)

但是,如果您在tab2 TabControl中添加tabpage(使用datagridview),而在顶级选项卡控件中选择了tab1,则表示列宽未正确报告。

0 个答案:

没有答案