检查DataGrid上的重复值

时间:2013-06-14 13:03:19

标签: vb.net datagridview

我有一个DataGrid绑定了一个DataTable,它有两列存储序列,在我的DataGrid中这些序列列与DataGridViewComboBoxes绑定。用户可以从ComboBoxes设置序列。序列列中的默认值为0.

我只想检查按钮点击时两列中的重复项,用户不应该在两列中选择任何重复值。

如果我通过使用DataView的ToTable方法来实现它来查找不同的值,那么它也会获取值为“0”的行

如果我对DataTable上的列实现唯一约束,它也会检查0。

如果尝试用0删除值,它也会更改DataGrid,因为DataGrid与DataTable绑定

如果我尝试从现有的dataTable声明一个新的DataTable,它也会自动绑定到DataGrid。

请帮帮我。

1 个答案:

答案 0 :(得分:2)

以下是如何在DataTable中检查重复值的示例:

Option Strict On

Module Module1
  Sub Main()
    Dim dt As New DataTable
    dt.Columns.Add("mycolumn", GetType(Integer))
    dt.Rows.Add({"1"})
    dt.Rows.Add({"2"})
    dt.Rows.Add({"2"})
    dt.Rows.Add({"4"})
    dt.Rows.Add({"7"})
    Dim duplicateDictionary As New Dictionary(Of Integer, Integer) 'value, count

    For Each row As DataRow In dt.Rows
      Dim count As Integer = 0
      Dim value As Integer = CInt(row("mycolumn"))
      duplicateDictionary.TryGetValue(value, count)
      duplicateDictionary(value) = count + 1
    Next

    For Each kv As KeyValuePair(Of Integer, Integer) In duplicateDictionary
      If kv.Value > 1 Then 'we have a duplicate
        Debug.WriteLine("{0} is a duplicated value, encountered {1} times", kv.Key, kv.Value)
      End If
    Next
  End Sub
End Module

添加UniqueConstraint也是可能的,但我发现它有时过于干扰,具体取决于编辑的工作方式。对于直接网格编辑,您可能希望用户将无效记录保存在内存中,并允许修复错误,显示验证错误而不是约束违例异常。当然,您永远不会将无效数据保存到数据库中。