0

1 つのデータテーブルで文字列を検索しようとしているので、新しいヒットが表示されるとアクションがトリガーされます。どうやってするか?

私の現在のコード:

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

サブが呼び出されるたびに、すべてのヒットに対して「notif」関数が呼び出されます。しかし、一意のヒットごとに1回呼び出されるようにします。どうやってするの?

使用例: たとえば、テーブルがそのような場合に初めて sub が呼び出されます。

something foo
smthelse bar

検索文字列は「some」で、Notif は「something foo」に対して 1 回呼び出されます。次にサブが呼び出されると、テーブルは次のようになります。

something foo
something else 
smthelse bar

Notif は「何か他のもの」に対してのみ呼び出されるようになりました

4

2 に答える 2

0

解決策が見つかりました-row.RowStateプロパティを使用しました。

行が変更または追加されるたびに、その row.RowState プロパティは DataRowState.Added または DataRowState.Modified のいずれかに等しくなり、row.AcceptChanges() が呼び出されると DataRowState.Unchanged になります。

于 2013-02-20T07:59:09.080 に答える
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 に答える