[英]Highlighting any Duplicates in a DataGridView VB.NET
我有一個從MySQL DB填充的DataGridView,單擊一個按鈕后,我希望通過突出顯示特定列中的重復項來驗證表。
做這個的最好方式是什么。 該字段不是數據庫中的主鍵,可以復制,但是僅需要弄清楚是這種情況?
按要突出顯示的列對DataGridView進行排序,然后循環瀏覽每一行。 如果列值與先前的值相同,請加亮顯示。
如果想花哨的話,可以針對數據源(可能是DataTable,但可以是其他東西)編寫LINQ查詢,該查詢按所需的列進行分組,計算每個組中的實例數,然后僅使用大於1的計數。您可以將其用作查找或將其重新連接到數據源,以“標記”具有重復值的行。 應用突出顯示將需要檢查此新字段,然后相應地應用突出顯示。
沒有時間編寫一些示例代碼,但這應該不太困難。
編輯
Index
= 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名稱然后使用列索引來調用該子項。 例如HighlightDupes(DataGridView1, 0)
這將對第一列進行排序,並找到重復項。
由於排序原因,不確定單元格格式是否可以正常工作。 最好是先填充數組,然后排序,然后找到該數組的重復對象,然后遍歷dgv並設置未排序的單元格的格式。 或者,您可以查看dgv rowprepaint事件可能對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.