我有一个DataGridView从MySQL数据库填充,并点击一个按钮,我希望通过突出显示特定列中的重复项来验证表。高亮DataGridView VB.NET中的任何重复
这样做的最好方法是什么?该字段不是数据库中的主键,可以复制,但只需要明确说明是这种情况?
我有一个DataGridView从MySQL数据库填充,并点击一个按钮,我希望通过突出显示特定列中的重复项来验证表。高亮DataGridView VB.NET中的任何重复
这样做的最好方法是什么?该字段不是数据库中的主键,可以复制,但只需要明确说明是这种情况?
按您希望突出显示的列对DataGridView进行排序,然后遍历每一行。如果列值与之前的值相同,请应用高亮。
如果你想变得很花哨,你可以写一个针对你的数据源的LINQ查询(可能是一个DataTable,但可能是别的东西),按期望的列进行分组,计算每个组中的实例数,然后选择只有那些数值大于1的值。然后,您可以将其用作查找,或将其连接回数据源以“标记”具有重复值的那些行。应用突出显示将需要检查这个新的字段,然后相应地应用突出显示。
没有时间掀起一些示例代码,但它不应该太难。
编辑
Index
= 0
)则跳过这就是问题所在,我不知道如何做到这一点 – user1662306 2013-03-20 16:50:35
Downvoter:这可能不是世界上最有用的答案,但是你真的会把它归类为无用吗? OP只是要求最好的方式,而不是代码示例。 – JDB 2013-03-20 20:10:05
这将是这样做的一个方式,通过#Cyborgx37
Sub HighlightDupes(ByRef dgv As DataGridView, ByVal col_id As Integer)
Dim dgvCol As DataGridViewColumn = dgv.Columns(col_id)
dgv.Sort(dgvCol, System.ComponentModel.ListSortDirection.Ascending)
Dim numRows As Integer = dgv.Rows.Count() ''// or dgv.SelectedRows.Count() for the selected rows
Dim flagFirstRow As Boolean = True
Dim tempStr As String = ""
For Each RW As DataGridViewRow In dgv.Rows ''// or dgv.SelectedRows for the selected rows
On Error Resume Next
If Not (flagFirstRow) Then
If (RW.Cells(col_id).Value.ToString() = tempStr) Then
''// RW.Cells(col_id).Style.BackColor = Color.LightGreen
''// RW.Cells(col_id).Style.BackColor = Color.White
RW.Cells(col_id).Selected = True
dgv.CurrentCell.Style.BackColor = Color.LightGreen
dgv.CurrentCell.Style.ForeColor = Color.White
MsgBox("Dupe found: " & tempStr)
End If
End If
tempStr = RW.Cells(col_id).Value.ToString()
flagFirstRow = False
Next
End Sub
的建议。
您可以使用datagridview名称然后使用列索引来调用sub。 例如HighlightDupes(DataGridView1, 0)
这将排序第一列,并找到愚蠢。
不确定单元格格式是否会因排序而正常工作。可能会更好地填充数组然后进行排序,然后找到这些数组,然后通过dgv进行循环,并在未对其进行排序时设置单元格的格式。或者你可以看看dgv rowprepaint event可能会帮助你。
你有多少列?你能指出列名吗? – 2013-03-20 17:10:47
你能否在你的问题中包含一个具有所需行为的模型? – Neolisk 2013-03-21 00:22:22