Vizsgáljuk meg, hogy lehet a memóriában, DataSetben tárolt adatokat tovább szűrni, illetve rendezni. Az ADO.NET két megközelítést támogat erre a műveletre:
A DataTable Select metódusának használatát. Ez a metódus szűrt és rendezett adatsorok tömbjével tér vissza.
A DataView objektum filter, find és sort metódusai. Ez az objektum hozzákapcsolható az adatmegjelenítésre képes objektumokhoz.
Nézzünk egy példát a szűrőfeltétel felépítésére:
„OrderDate >= ’01.03.1998’ AND OrderDate <= ’31.03.1998’”
A tipikus rendezési kifejezés: a mező neve és a rendezés iránya. Ami a DESC (csökkenő) vagy az ASC (növekvő) szavakkal határozható meg.
„OrderDate DESC”
A következő kód egy példa a DataTable Select metódusának használatára:
private static void GetRowsByFilter()
{
DataTable customerTable = new DataTable( "Customers" );
customerTable.Columns.Add( "id", typeof(int) );
customerTable.Columns.Add( "name", typeof(string) );
customerTable.Columns[ "id" ].Unique = true;
customerTable.PrimaryKey = new DataColumn[] {CustomerTable.Columns["id"] };
// Tíz sor hozzáadása a táblához
for( int id=1; id<=10; id++ )
{
customerTable.Rows.Add(
new object[] { id, string.Format("customer{0}", id) } );
}
customerTable.AcceptChanges();
// Újabb tíz sor hozzáadása
for( int id=11; id<=20; id++ )
{
customerTable.Rows.Add(
new object[] { id, string.Format("customer{0}", id) } );
}
string strExpr;
string strSort;
strExpr = "id > 5";
// Csökkenő sorrend a CompanyName nevű mezőben.
strSort = "name DESC";
DataRow[] foundRows = customerTable.Select( strExpr, strSort, DataViewRowState.Added );
PrintRows( foundRows, "filtered rows" );
foundRows = customerTable.Select();
PrintRows( foundRows, "all rows" );
}
private static void PrintRows( DataRow[] rows, string label )
{
Console.WriteLine( "\n{0}", label );
if( rows.Length <= 0 )
{
Console.WriteLine( "no rows found" );
return;
}
foreach( DataRow r in rows )
{
foreach( DataColumn c in r.Table.Columns )
{
Console.Write( "\t {0}", r[c] );
}
Console.WriteLine();
}
}
Az alapvető probléma a DataTable Select metódusával, hogy a szűrés eredményeként kapott adatsorokat egy tömbben adja vissza. Ez nem köthető sem a DataGridhez sem más adatmegjelenítésre alkalmas objektumhoz közvetlenül. Erre a DataView használata ad lehetőséget.