随笔 - 89  文章 - 1  评论 - 261  阅读 - 16万

绕过DataGridView的滚动条BUG

前些日子在开发中需要使用.Net 2.0中的DataGridView组件来进行手动填充数据(非使用DataBind的方式)时,发现其滚动条状态有问题。重新这个BUG的步骤如下:

  1. 将一个DataGridView的Enabled设置为false;
  2. 填充数据;
  3. 然后设置其Enabled属性为true;
  4. 把焦点置入这个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时,行数发生变化不会导致重算滚动条范围,从而导致错误。

posted on   阿齐  阅读(1641)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2007年10月 >
30 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示