2013-02-19 1 views
0

문자열에 대해 하나의 datatable을 검색하려고합니다. 따라서 새로운 히트가 나타나면 작업이 트리거됩니다. 그렇게하는 방법?VB.Net에서 데이터 테이블에 새로운 값을 검색합니다.

내 현재 코드 :

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 

함수가 모든의 서브가 호출 될 때마다 명중이라고 "터들하고 싸우는데"; 하지만 나는 그것이 모든 독특한 히트마다 한 번 호출되기를 바랍니다. 그것을하는 방법? 케이스를 사용

는 : 테이블 그런 때 처음으로 서브를 호출, 말 :

something foo 
smthelse bar 

검색 문자열은 "일부"는 NOTIF는 "뭔가 foo는"한 번만 호출됩니다. 하위 테이블이라고 다음 시간은 같다 :

something foo 
something else 
smthelse bar 

이제 NOTIF은 또한 당신의 코드를 더 쉽게 읽을 내가 대신 Linq-To-DataSet를 사용하는 것이 좋습니다 것입니다

+0

"무언가"는 필드이고 "foo"는 다른 것입니까, 아니면 "무언가 foo"한 필드입니까? –

+0

뭔가 foo = 한 행, 두 개의 열. – utrack

답변

0

해결책을 찾았습니다. row.RowState 속성을 사용했습니다.

행이 변경되거나 추가 될 때마다 row.RowState 속성은 DataRowState.Added 또는 DataRowState.Modified와 같으며 row.AcceptChanges()가 호출되면 DataRowState.Unchanged가됩니다.

0

"뭔가", 유지 보수 및 요구해야한다 그룹화와 같은 좋은 기능이 있습니다.

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 
+0

고마워요! 나는 그것을 볼 것입니다 -하지만 지금까지 문제를 해결하지는 못합니다 ... – utrack

+0

죄송 합니다만, 여러 번 검색하는 데 어떻게 사용합니까? 마찬가지로 검색 할 값의 데이터 테이블이 있는데 "Where Name.Contains (searchtable.rows (1) (0) .formattedvalue) 또는 Name.Contains (searchtable.rows (2) (0) .formattedvalue) 또는 ... Name.Contains (searchtable.rows (searchtable.rows.count) (0) .formattedvalue) – utrack

관련 문제