簡體   English   中英

突出顯示DataGridView VB.NET中的所有重復項

[英]Highlighting any Duplicates in a DataGridView VB.NET

我有一個從MySQL DB填充的DataGridView,單擊一個按鈕后,我希望通過突出顯示特定列中的重復項來驗證表。

做這個的最好方式是什么。 該字段不是數據庫中的主鍵,可以復制,但是僅需要弄清楚是這種情況?

按要突出顯示的列對DataGridView進行排序,然后循環瀏覽每一行。 如果列值與先前的值相同,請加亮顯示。

如果想花哨的話,可以針對數據源(可能是DataTable,但可以是其他東西)編寫LINQ查詢,該查詢按所需的列進行分組,計算每個組中的實例數,然后僅使用大於1的計數。您可以將其用作查找或將其重新連接到數據源,以“標記”具有重復值的行。 應用突出顯示將需要檢查此新字段,然后相應地應用突出顯示。

沒有時間編寫一些示例代碼,但這應該不太困難。

編輯

  1. 使用DataGridView.Sort進行排序。
  2. 遍歷Rows集合。
    1. 如果當前行是第一行( Index = 0 ),則跳過
    2. 否則,從Cells [ columnName ]獲取所需列的值。 當前行和上一行。
    3. 比較它們。 如果它們相同,則應用樣式 ,例如背景色。

正如#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM