我有一个DataGrid绑定了一个DataTable,它有两列存储序列,在我的DataGrid中这些序列列与DataGridViewComboBoxes绑定。用户可以从ComboBoxes设置序列。序列列中的默认值为0.
我只想检查按钮点击时两列中的重复项,用户不应该在两列中选择任何重复值。
如果我通过使用DataView的ToTable方法来实现它来查找不同的值,那么它也会获取值为“0”的行
如果我对DataTable上的列实现唯一约束,它也会检查0。
如果尝试用0删除值,它也会更改DataGrid,因为DataGrid与DataTable绑定
如果我尝试从现有的dataTable声明一个新的DataTable,它也会自动绑定到DataGrid。
请帮帮我。
答案 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也是可能的,但我发现它有时过于干扰,具体取决于编辑的工作方式。对于直接网格编辑,您可能希望用户将无效记录保存在内存中,并允许修复错误,显示验证错误而不是约束违例异常。当然,您永远不会将无效数据保存到数据库中。