2009-03-11 6 views
30

行単位で操作することなく、C#でDataTableの値を見つける方法はありますか?DataTableで値を見つける

値は、データテーブルのセルを(カンマで区切られた[columnName] .valueの部分文字列)の一部にすることができ、その値はその行のいずれかの列に存在することがあります。

答えて

49

DataTableまたはDataSetオブジェクトには、パラメータとして渡されたクエリに基づいて結果のDataRow配列を返すSelectメソッドがあります。

あなたの要件を見ると、あなたのfilterexpressressionはこの作業を行うためにいくらか一般的でなければなりません。

myDataTable.Select("columnName1 like '%" + value + "%'"); 
+1

我々はLINQと上記の構文をどのように行うことができます。正確な値が必要な場合は – Karan

14

たぶん、あなたはこのような可能列で行をフィルタすることができます

DataRow[] filteredRows = 
    datatable.Select(string.Format("{0} LIKE '%{1}%'", columnName, value)); 
+2

です。DataRow [] filteredRow = datatable.Select( "ColumnName = 'value'"); – Nicola

8

私の知る限り、すべての列を検索するために組み込まれては何もありません。プライマリキーに対してのみFindを使用できます。 Selectには指定された列が必要です。あなたはおそらくLINQを使うことができますが、最終的には同じループをします。おそらくあなた自身でそれを展開するのでしょうか?それは少なくとも読むことができるでしょう。

-1

この質問は2009年に尋ねたが、私は私のコードを共有したい:

Public Function RowSearch(ByVal dttable As DataTable, ByVal searchcolumns As String()) As DataTable 

    Dim x As Integer 
    Dim y As Integer 

    Dim bln As Boolean 

    Dim dttable2 As New DataTable 
    For x = 0 To dttable.Columns.Count - 1 
     dttable2.Columns.Add(dttable.Columns(x).ColumnName) 
    Next 

    For x = 0 To dttable.Rows.Count - 1 
     For y = 0 To searchcolumns.Length - 1 
      If String.IsNullOrEmpty(searchcolumns(y)) = False Then 
       If searchcolumns(y) = CStr(dttable.Rows(x)(y + 1) & "") & "" Then 
        bln = True 
       Else 
        bln = False 
        Exit For 
       End If 
      End If 
     Next 
     If bln = True Then 
      dttable2.Rows.Add(dttable.Rows(x).ItemArray) 
     End If 
    Next 

    Return dttable2 


End Function 
+0

これはVBではなくC#の質問です。 – AzNjoE

+0

と行と列のループ、OPが避けたいもの – bluish