2009-04-14 12 views
0

편집 : 참고. 나는 내가 .Select, DataRowView, RowFind 등을 사용하는 것에 관심이 없다고 언급 했어야했다. 그 제안들에 감사하지만 그것이 그대로 서서, 나는 최적화되기를 바랬다.사용자 지정 데이터 테이블 검색

배열의 용어에 대해 데이터 테이블을 검색하는 함수를 작성했습니다. 그런 다음 DataGridView에 바인딩 될 수 있도록 데이터 테이블을 데이터 집합으로 반환합니다. 누구든지 최적화 아이디어가 있습니까? 이것은 실시간 검색이므로 (모든 검색어는 즉시 검색됩니다) 가능한 한 빨리 기능을 만들고 싶습니다. 속도는 실제로 이미 꽤 좋았지 만 나는 그것에 대해 바꿀 수있는 다른 것이 있으면 모두에게 물어볼 가치가 있다고 생각했습니다.

  • VB.NET
  • .NET 2.0

공공 기능 SEARCHENGINE (ByVal의 이용 약관() 문자열, DataTable을 같이하는 ByRef ResidentTBL으로) 새로운 데이터 집합으로 데이터 집합 희미한 newdts로 ("사용자") 새로운 테이블로 유혹 할 수있는 새로운 테이블을 만듭니다. Dim residentPassCeiling, tempPassCeiling, terms Asiling As Integer residentPassCeiling = ResidentTBL.R ows.Count - 1 termsceiling = Terms.GetUpperBound (0) newtable = ResidentTBL.Clone

 For j = 0 To termsceiling 

      If j < 1 Then 
       '######################## BEGIN First Pass ######################################################################## 
       For i = 0 To residentPassCeiling 

        If ResidentTBL.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper = Terms(j).ToUpper Then 
         'we have an excact match on account skip further additions 
         newtable.Rows.Clear() 
         newtable.ImportRow(ResidentTBL.Rows(i)) 
         newdts.Tables.Add(newtable) 
         Return newdts 
        Else 
         If _ 
         ResidentTBL.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         ResidentTBL.Rows(i).Item(TheColumns.displayName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         ResidentTBL.Rows(i).Item(TheColumns.sn - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         ResidentTBL.Rows(i).Item(TheColumns.givenName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         ResidentTBL.Rows(i).Item(TheColumns.l - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         ResidentTBL.Rows(i).Item(TheColumns.department - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         ResidentTBL.Rows(i).Item(TheColumns.telephoneNumber - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         ResidentTBL.Rows(i).Item(TheColumns.building - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Then 
          'then add to the row 
          newtable.ImportRow(ResidentTBL.Rows(i)) 
         End If 
        End If 

       Next i 
       '######################## END First Pass ######################################################################## 
      Else 
       '######################## BEGIN Second.. Pass(es) ######################################################################## 
       'Further searches we want to search the already filtered datatable from each term 
       temptable = newtable.Clone 
       temptable = newtable.Copy 
       newtable.Clear() 
       tempPassCeiling = temptable.Rows.Count - 1 
       For i = 0 To tempPassCeiling 

        If temptable.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper = Terms(j).ToUpper Then 
         'we have an excact match on account skip further additions 
         newtable.Rows.Clear() 
         newtable.ImportRow(temptable.Rows(i)) 
         newdts.Tables.Add(newtable) 
         Return newdts 
        Else 
         If _ 
         temptable.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         temptable.Rows(i).Item(TheColumns.sn - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         temptable.Rows(i).Item(TheColumns.givenName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         temptable.Rows(i).Item(TheColumns.l - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         temptable.Rows(i).Item(TheColumns.department - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         temptable.Rows(i).Item(TheColumns.telephoneNumber - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _ 
         temptable.Rows(i).Item(TheColumns.building - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Then 
          'then add to the row 
          newtable.ImportRow(temptable.Rows(i)) 
         End If 
        End If 

       Next i 

       temptable = Nothing 
       '######################## END Second.. Pass(es) ######################################################################## 
      End If 

     Next j 
     newdts.Tables.Add(newtable) 
     ResidentTBL = Nothing 

     Return newdts 
     newdts = Nothing 

    End Function 
+0

에 문서입니다. –

답변