我有一個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