绕过DataGridView的滚动条BUG
前些日子在开发中需要使用.Net 2.0中的DataGridView组件来进行手动填充数据(非使用DataBind的方式)时,发现其滚动条状态有问题。重新这个BUG的步骤如下:
- 将一个DataGridView的Enabled设置为false;
- 填充数据;
- 然后设置其Enabled属性为true;
- 把焦点置入这个DataGridView的一个单元格中,使用回车键或者向下箭头键一直向下焦点,会出现一个滚动条位置错误。
代码如下:
private void execute(int count)
{
dataGridView1.Enabled = false;
try
{
dataGridView1.Rows.Clear();
for (int i = 0; i < count; i++)
{
dataGridView1.Rows.Add(new object[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() });
}
}
finally
{
dataGridView1.Enabled = true;
}
}
通过设置DataGridView的ScrollBars属性可绕过这个BUG,修正后的如下
private void execute(int count)
{
dataGridView1.ScrollBars = ScrollBars.None; //
dataGridView1.Enabled = false;
try
{
dataGridView1.Rows.Clear();
for (int i = 0; i < count; i++)
{
dataGridView1.Rows.Add(new object[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() });
}
}
finally
{
dataGridView1.Enabled = true;
dataGridView1.ScrollBars = ScrollBars.Both; //
}
}
估计这个BUG产生的原因是DataGridView的Enabled属性为false时,行数发生变化不会导致重算滚动条范围,从而导致错误。