VB.Net在数据表中搜索新的值

时间:2013-02-19 16:46:33

标签: vb.net search datatable

我正在尝试在一个数据表中搜索字符串,因此如果出现新的命中,则会触发该操作。怎么做?

我目前的代码:

If searchvalue <> "" Then
                foundRows = table.Select("Name LIKE '%" & searchvalue & "%'")
                If foundRows.Length = 0 Then
                    'none found
                Else
                    For Each r In foundRows
                        notif("Found "&r.itemarray(0) & " in " & r.itemarray(1))
                    Next
                End If
            End If

每次调用sub时,每次命中都会调用“notif”函数;但是我希望每次独特的打击都会被召唤一次。怎么做?

使用大小写:比如说,当表格如下时,第一次调用sub:

something foo
smthelse bar

搜索字符串是“some”,Notif为“foo”调用了一次。下次调用sub时,表格如下:

something foo
something else 
smthelse bar

现在只应该为“其他东西”调用Notif

2 个答案:

答案 0 :(得分:0)

我建议使用Linq-To-DataSet代替,这会使您的代码更具可读性和可维护性,并且还具有分组等一些不错的功能:

If searchvalue.Length <> 0 Then
    Dim foundNamegroups = From row In table
                          Let Name = row.Field(Of String)("Name")
                          Where Name.Contains(searchvalue)
                          Group row By Name Into NameGroup = Group
    If foundNamegroups.Any() Then
        For Each grp In foundNamegroups
            ' note that the DataRows are in  grp.NameGroup
            Dim msg = String.Format("Found {0} rows for name {1}", grp.NameGroup.Count(), grp.Name)
            notif(msg)
        Next
    End If
End If

答案 1 :(得分:0)

找到解决方案 - 我使用了row.RowState属性。

每次更改或添加行时,其row.RowState属性等于DataRowState.Added或DataRowState.Modified,并且当row.AcceptChanges()调用它时,它变为DataRowState.Unchanged。