Condividi tramite


Ricerca di righe

È possibile eseguire ricerche di righe in base ai relativi valori della chiave di ordinamento usando i metodi Find e FindRows del tipo DataView. La distinzione tra maiuscole e minuscole nei valori di ricerca dei metodi Find e FindRows viene determinata dalla proprietà CaseSensitive del tipo DataTable sottostante. Per restituire un risultato, è necessario che i valori di ricerca corrispondano interamente ai valori della chiave di ordinamento esistenti.

Il metodo Find restituisce un numero intero con l'indice del tipo DataRowView che corrisponde ai criteri di ricerca. Se più righe corrispondono ai criteri di ricerca, verrà restituito solo l'indice del primo DataRowView corrispondente. Se non viene trovata alcuna corrispondenza, il metodo Find restituirà -1.

Per restituire risultati di ricerca corrispondenti a più righe, usare il metodo FindRows. Il metodo FindRows esegue le stesse operazioni del metodo Find, ma restituisce una matrice DataRowView contenente riferimenti a tutte le righe corrispondenti nel DataView. Se non viene rilevata alcuna corrispondenza, la matrice DataRowView risulterà vuota.

Per usare i metodi Find o FindRows, è necessario specificare un ordinamento impostando ApplyDefaultSort su true o usando la proprietà Sort. Se non viene specificato alcun ordinamento, verrà generata un'eccezione.

I metodi Find e FindRows accettano come input una matrice di valori, la cui lunghezza corrisponde al numero di colonne dell'ordinamento. In caso di ordinamento di una singola colonna, è possibile passare un unico valore. In caso di ordinamenti contenenti più colonne, viene passata una matrice di oggetti. Si noti che per un ordinamento su più colonne, i valori nella matrice di oggetti devono corrispondere all'ordine delle colonne specificato nella proprietà Sort di DataView.

Nell'esempio di codice seguente viene illustrata la chiamata del metodo Find per un DataView con un ordinamento di una singola colonna.

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

Se nella proprietà Sort sono specificate più colonne, è necessario passare una matrice di oggetti con i valori di ricerca per ogni colonna nell'ordine specificato dalla proprietà Sort, come illustrato nell'esempio di codice seguente.

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

Vedi anche