Trouver une valeur dans DataTable
Existe-t-il un moyen de trouver une valeur dans DataTable en C# sans effectuer une opération ligne par ligne?
La valeur peut être une partie de (une sous-chaîne de la rangée[nomrubrique].valeur, séparée par une virgule) Une cellule dans le datatable et la valeur peuvent être présents dans l'une des colonnes de la ligne.
4 réponses
Un objet DataTable ou DataSet aura une méthode Select qui retournera un tableau DataRow de résultats basé sur la requête transmise en tant que paramètre.
En regardant votre exigence, votre expression de filtre devra être quelque peu générale pour que cela fonctionne.
myDataTable.Select("columnName1 like '%" + value + "%'");
Peut-être que vous pouvez filtrer les lignes par des colonnes possibles comme ceci:
DataRow[] filteredRows =
datatable.Select(string.Format("{0} LIKE '%{1}%'", columnName, value));
AFAIK, il n'y a rien intégré pour rechercher toutes les colonnes. Vous pouvez utiliser {[0] } uniquement contre la clé primaire. Select
nécessite des colonnes spécifiées. Vous pouvez peut-être utiliser LINQ, mais finalement cela fait juste la même boucle. Peut-être simplement le dérouler vous-même? Ça va être lisible, au moins.
Cette question posée en 2009 mais je veux partager mes codes:
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