Partager via


Recherche de lignes

Vous pouvez rechercher des lignes en fonction de leurs valeurs de clé de tri en utilisant les méthodes Find et FindRows de DataView. La sensibilité à la casse des valeurs de recherche dans les méthodes Find et FindRows est déterminée par la propriété CaseSensitive de l'objet DataTable sous-jacent. Les valeurs de recherche doivent correspondre aux valeurs de clé de tri existantes dans leur intégralité afin de retourner un résultat.

La Find méthode retourne un entier avec l’index de celui DataRowView qui correspond aux critères de recherche. Si plusieurs lignes correspondent aux critères de recherche, seul l’index de la première correspondance DataRowView est retourné. Si aucune correspondance n’est trouvée, Find retourne -1.

Pour retourner les résultats de recherche qui correspondent à plusieurs lignes, utilisez la FindRows méthode. FindRows fonctionne comme la Find méthode, sauf qu’elle retourne un DataRowView tableau qui référence toutes les lignes correspondantes dans DataView. Si aucune correspondance n’est trouvée, le DataRowView tableau est vide.

Pour utiliser les méthodes Find ou FindRows, vous devez spécifier un ordre de tri soit en définissant ApplyDefaultSort à true, soit en utilisant la propriété Sort. Si aucun ordre de tri n’est spécifié, une exception est levée.

Les méthodes Find et FindRows prennent en entrée un tableau de valeurs dont la longueur correspond au nombre de colonnes dans l’ordre de tri. Dans le cas d’un tri sur une seule colonne, vous pouvez passer une valeur unique. Pour les ordres de tri incluant plusieurs colonnes, vous passez un tableau d'objets. Notez que pour un tri sur plusieurs colonnes, les valeurs du tableau d’objets doivent correspondre à l’ordre des colonnes spécifiées dans la Sort propriété de DataView.

L’exemple de code suivant montre la méthode Find appliquée à l'DataView dans l'ordre de tri d'une seule colonne.

Dim custView As DataView = _
  New DataView(custDS.Tables("Customers"), "", _
  "CompanyName", DataViewRowState.CurrentRows)

Dim rowIndex As Integer = custView.Find("The Cracker Box")

If rowIndex = -1 Then
  Console.WriteLine("No match found.")
Else
  Console.WriteLine("{0}, {1}", _
    custView(rowIndex)("CustomerID").ToString(), _
    custView(rowIndex)("CompanyName").ToString())
End If
DataView custView = new DataView(custDS.Tables["Customers"], "",
  "CompanyName", DataViewRowState.CurrentRows);

int rowIndex = custView.Find("The Cracker Box");

if (rowIndex == -1)
  Console.WriteLine("No match found.");
else
  Console.WriteLine("{0}, {1}",
    custView[rowIndex]["CustomerID"].ToString(),
    custView[rowIndex]["CompanyName"].ToString());

Si votre Sort propriété spécifie plusieurs colonnes, vous devez transmettre un tableau d’objets avec les valeurs de recherche de chaque colonne dans l’ordre spécifié par la Sort propriété, comme dans l’exemple de code suivant.

Dim custView As DataView = _
  New DataView(custDS.Tables("Customers"), "", _
  "CompanyName, ContactName", _
  DataViewRowState.CurrentRows)

Dim foundRows() As DataRowView = _
  custView.FindRows(New object() {"The Cracker Box", "Liu Wong"})

If foundRows.Length = 0 Then
  Console.WriteLine("No match found.")
Else
  Dim myDRV As DataRowView
  For Each myDRV In foundRows
    Console.WriteLine("{0}, {1}", _
      myDRV("CompanyName").ToString(), myDRV("ContactName").ToString())
  Next
End If
DataView custView = new DataView(custDS.Tables["Customers"], "",
  "CompanyName, ContactName",
  DataViewRowState.CurrentRows);

DataRowView[] foundRows =
  custView.FindRows(new object[] {"The Cracker Box", "Liu Wong"});

if (foundRows.Length == 0)
  Console.WriteLine("No match found.");
else
  foreach (DataRowView myDRV in foundRows)
    Console.WriteLine("{0}, {1}", myDRV["CompanyName"].ToString(),
      myDRV["ContactName"].ToString());

Voir aussi