我有一个从 MySQL DB 填充的 DataGridView,单击一个按钮,我希望通过突出显示特定列中的重复项来验证表。
做这个的最好方式是什么。该字段不是数据库中的主键,可以复制,但是只需要明确是这种情况吗?
我有一个从 MySQL DB 填充的 DataGridView,单击一个按钮,我希望通过突出显示特定列中的重复项来验证表。
做这个的最好方式是什么。该字段不是数据库中的主键,可以复制,但是只需要明确是这种情况吗?
这将是#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 事件可能会对您有所帮助。
按要突出显示的列对 DataGridView 进行排序,然后遍历每一行。如果列值与前一个值相同,则应用突出显示。
如果您想花哨,您可以针对您的数据源(可能是 DataTable,但可能是其他东西)编写一个 LINQ 查询,该查询按所需的列分组,计算每个组中的实例数,然后只选择那些值大于 1 的计数。然后您可以将其用作查找或将其连接回数据源以“标记”那些具有重复值的行。应用突出显示需要检查这个新字段,然后相应地应用突出显示。
没有时间编写一些示例代码,但应该不会太难。
编辑
Index
= 0