我有一个从MySQL数据库中填充的DataGridView,点击一个按钮我想通过突出显示特定列中的重复项来验证表。
这样做的最佳方法是什么。该字段不是数据库中的主键,可以复制,但是只需要明白是这种情况吗?
答案 0 :(得分:0)
按要突出显示的列对DataGridView进行排序,然后遍历每一行。如果列值与先前值相同,请应用突出显示。
如果你想得到想象,你可以针对你的数据源编写一个LINQ查询(可能是一个DataTable,但也可能是其他的),按所需列分组,计算每个组中的实例数,然后只选择计数大于1的那些值。然后,您可以将其用作查找或将其连接回数据源,以“标记”具有重复值的行。应用突出显示需要检查此新字段,然后相应地应用突出显示。
没有时间制作一些示例代码,但这不应该太难。
修改强>
Index
= 0
),请跳过答案 1 :(得分:0)
这将是#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)
这会对第一列进行排序,并找到欺骗行为。
由于排序,不确定单元格格式是否正常工作。可能更好的填充数组然后排序,然后找到它的dupe然后循环通过dgv并设置单元格尚未排序时的格式。或者您可以查看dgv rowprepaint event可能会帮助您。