滚动时所选的DataGridView行被覆盖(合并)与另一行(Selected DataGridVi

2019-11-03 04:43发布

所以我必须在它的数据的56行的一个DataGridView。 当我选择的任何行,然后滚动它关闭屏幕,然后重新打开,从选定行的原始数据变成与其他行的数据合并 - 似乎取决于我是否向上/向下滚动或使用滚动条或鼠标滚轮(我怀疑上页/下键和方向键将产生类似的效果也可以)。 在网上搜索只生产类似情况一个结果,当用户水平滚动......有人建议他使用双缓冲,但基于反射的代码不仅造成我选择行开启全黑:

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真假也不有差别。 任何有识之士将是巨大的!

Answer 1:

好了,这可能不是确切的答案,但我指出了正确的方向......在和该DGV的其他问题 - 当DGV最初显示,在选择第一行和“覆盖”在白色的背景颜色...发现这个代码来解决的背景颜色问题,它解决了文本覆盖问题:

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事件,但是这个代码一举两得一石! 我发现从本文的代码,其可以提供更深入的了解: 实现在一个DataGridView控制透明行选择



文章来源: Selected DataGridView row is being overwritten (merged) with another row when scrolling