最近做一个小数据库管理软件,dataset中有一个交叉查询填充的表,有3000多行,30多列,把这个表bindingsource绑定到datagridview控件上时,出现了卡顿,具体就是加载数据时看到明显的数据一行行显示出来,用鼠标滚动表时,也是一行行的刷新,虽然刷数很快,但用起来很不顺畅。没道理是这样的,在ACCEss中显示一个同样的查询表,就非常流畅,没一点卡顿,我开头以为是因为access中是只读的原因,但把datagridview设成只读一样卡,又按网上的说法把autosizecolumnsmode设成none(本来默认就是none)的,还是一样,最后只有一条路了,设置doublebuffered属性,看看双缓冲有没有效果,可恶的是这个属性是PROTECTED的,无法直接设置,网上的方案都是C++的,没办法死马当活马医,找了一个用VB.net照描:http://www.cnblogs.com/qingteng1983/archive/2010/05/09/1730905.html。
在form1_load开头加入:
Dim type As Type = DataGridView1.GetType()
Dim pi As PropertyInfo = type.GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance or System.Reflection.BindingFlags.NonPublic)
pi.SetValue(DataGridView1, True, Nothing)
问题解决!
不过,我还是感觉没有access中那样的流畅,也没有SQL查询结果中流畅,不知是不是心理作用。