Sdílet prostřednictvím


Hledání řádků

Řádky můžete vyhledat podle jejich hodnot klíče řazení pomocí metod Find a FindRows třídy DataView. Citlivost na malá a velká písmena hodnot hledání v metodách Find a FindRows je určena vlastností CaseSensitive podkladového DataTable. Hodnoty hledání musí odpovídat existujícím hodnotám klíče řazení v celém rozsahu, aby se vrátil výsledek.

Metoda Find vrátí celé číslo s indexem DataRowView , který odpovídá kritériím hledání. Pokud kritéria hledání odpovídají více než jednomu řádku, vrátí se pouze index první shody DataRowView. Pokud nebyly nalezeny žádné shody, Find vrátí hodnotu -1.

Pokud chcete vrátit výsledky hledání, které odpovídají více řádkům, použijte metodu FindRows . FindRows funguje stejně jako metoda Find s tím rozdílem DataRowView , že vrací pole, které odkazuje na všechny odpovídající řádky v DataView. Pokud se nenajde žádná shoda, pole DataRowView bude prázdné.

Chcete-li použít Find nebo FindRows metody, je nutné zadat pořadí řazení buď nastavením ApplyDefaultSort na true nebo pomocí Sort vlastnosti. Pokud není zadáno žádné pořadí řazení, vyvolá se výjimka.

Find Metody FindRows přebírají jako vstup pole hodnot, jejichž délka odpovídá počtu sloupců v pořadí řazení. V případě řazení v jednom sloupci můžete předat jednu hodnotu. U pořadí řazení obsahujících více sloupců předáte pole objektů. Všimněte si, že pro řazení podle více sloupců musí hodnoty v poli objektu odpovídat pořadí sloupců zadaných ve Sort vlastnosti DataView.

Následující příklad kódu ukazuje metodu Find, která je volána pro DataView s pořadím řazení jednoho sloupce.

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());

Pokud vaše Sort vlastnost určuje více sloupců, musíte předat pole objektů s vyhledávacími hodnotami pro každý sloupec v pořadí určeném Sort vlastností, jako v následujícím příkladu kódu.

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());

Viz také