HIK Elektronikus Felsőoktatási Tankönyv- és Szakkönyvtár
A Kempelen Farkas Felsőoktatási Digitális Tankönyvtár/vagy más megjelenítő által közvetített digitális tartalmat a felhasználó a szerzői jogról szóló 1999. évi LXXVI. tv. 33. paragrafus (4) bekezdésében meghatározott oktatási, illetve tudományos kutatási célra használhatja fel. A felhasználó a digitális tartalmat képernyőn megjelenítheti, letöltheti, arról elektronikus adathordozóra vagy papíralapon másolatot készíthet, adatrögzítő rendszerében tárolhatja. A Kempelen Farkas Felsőoktatási Digitális Tankönyvtár/vagy más megjelenítő weblapján található digitális tartalmak üzletszerû felhasználása tilos, valamint kizárt a digitális tartalom módosítása és átdolgozása, illetve az ilyen módon keletkezett származékos anyag további felhasználása.

18.5.1. Szűrés és rendezés az ADO.NET-ben

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:

  1. A DataTable Select metódusának használatát. Ez a metódus szűrt és rendezett adatsorok tömbjével tér vissza.

  2. 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.