所以我有一个DataGridView,里面有56行数据。当我选择任何行,然后将其从屏幕上滚动然后再次打开时,所选行的原始数据将与另一行的数据合并 - 似乎取决于我是向上/向下滚动还是使用滚动条或鼠标滚轮(我怀疑pgUp / Down和箭头键也会产生类似的效果)。当用户水平滚动时,搜索网络只会产生类似情况的一个结果......有人建议他使用双缓冲,但基于反射的代码只会导致我选择的行变为全黑:
Imports System.Reflection
Module DataGridViewExtensions
<System.Diagnostics.DebuggerStepThrough()> _
<System.Runtime.CompilerServices.Extension()> _
Public Sub DoubleBuffered(ByVal sender As DataGridView, ByVal Setting As Boolean)
Dim dgvType As Type = sender.[GetType]()
Dim pi As PropertyInfo = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance Or BindingFlags.NonPublic)
pi.SetValue(sender, Setting, Nothing)
End Sub
End Module
我尝试将DGV VirtualMode设置为true和false,但两者都没有区别。任何见解都会很棒!
答案 0 :(得分:1)
好的,所以这可能不是明确的答案,但是我指出了正确的方向......还有DGV的其他问题 - 当DGV最初显示时,第一行被选中并且&#34;覆盖& #34;白色的背景颜色...找到此代码来修复背景颜色问题,它解决了文本覆盖问题:
Private Sub dgvPicks_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgvPicks.CellFormatting
If e.ColumnIndex = 0 Then
e.CellStyle.SelectionBackColor = SystemColors.Highlight
e.CellStyle.SelectionForeColor = Color.White
Else
e.CellStyle.SelectionBackColor = e.CellStyle.BackColor
e.CellStyle.SelectionForeColor = e.CellStyle.ForeColor
End If
End Sub
不确定它是否与正确设置SelectionBackColor
有关或与使用CellFormatting
事件有关,但此代码一举两得!我发现本文中的代码可能提供更多见解:
Implementing a transparent row selection in a DataGridView control