0

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

我当前的代码:

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 调用了一次“something foo”。下一次 sub 被称为 table 是这样的:

something foo
something else 
smthelse bar

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

4

2 回答 2

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
于 2013-02-19T16:57:40.557 回答
0

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

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

于 2013-02-20T07:59:09.080 回答