我正在尝试在一个数据表中搜索字符串,因此如果出现新的命中,则会触发该操作。怎么做?
我目前的代码:
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
答案 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。