C# - Adatlekérdezés eredményének szűrése

forráskód letöltése
Ha futtatunk egy select lekérdezést egy tetszőleges adatbázis táblájára és ennek eredményét tároljuk egy DataSet-ben, akkor lehetőségünk van ezt úgy megjeleníteni a felhasználó számára, hogy további szűrő feltételeket adjunk meg az eredményhalmazra. Ennek nagy előnye, hogy nem kell újabb select utasítást futtatnunk az SQL szerveren, mégis további leválogatásokat vihetünk véghez.
A mellékelt példa futtatása előtt a Form1.cs forráskód 145. sorában lévő adatbázis kapcsolat létrehozásnál adja meg saját bejelentkező nevét és jelszavát, valamint az SQL szervert futtató gép nevét, hogy a Norhwind példaadatbázis elérhető legyen.
A megoldás a DataView osztály RowFilter property-jében rejlik. Itt egy tetszőleges, szövegesen leírt feltételrendszer adható meg. Nézzük miként juthatunk el idáig.
Először is kell egy kapcsolat az adatbázishoz és egy lekérdezés, mely az egyszerűség kedvéért az Orders tábla minden sorát és oszlopát visszaadja.
    private void button1_Click(object sender, System.EventArgs e)
    {
      SqlConnection connection = new SqlConnection("data source=as1\\as1sql;user id=sa;password=;initial catalog=northwind");
      connection.Open();
      DataSet ds = new DataSet();
      SqlDataAdapter da = new SqlDataAdapter("select * from Orders", connection);
A lekérdezés eredményét tároljuk a DataSet-ben Orders néven.
      da.Fill(ds, "Orders");      
Ezt követően a globális DataView típusú dv nevű változóba tároljuk ezt az eredmény halmazt, melyet már egyszerűen a DataGrid-hez kapcsolhatunk annak DataSource property-jén keresztül, hogy az eredmény látható is legyen.
      dv = ds.Tables["Orders"].DefaultView;
      dataGrid1.DataSource = dv;
    }
Adott tehát most egy lekérdezés, melynek eredmény halmaza látható egy DataGrid-ben. Ha további szűréseket szeretnénk eszközölni az eredményen, akkor kell bevetnünk a DataView RowFilter property-jét. Mivel a DataView osztály példány már rendelkezésre áll, így a helyzetünk egyszerű. Egy ComboBox-ba felsorolunk néhány értéket és amikor a felhasználó választ egyet ezekből, akkor elvégezzük a szűrést, mely a tábla EmployeeID mezőjére történik a választott érték függvényében.
A szűrő feltétel megadása után ismét a DataGrid-hez kell kapcsolnunk a DataView osztály példányát, hogy a DataGrid tartalma frissüljön és most már a szűrt eredményhalmaz legyen látható.
    private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
      dv.RowFilter = "EmployeeID = " + comboBox1.SelectedItem.ToString();
      dataGrid1.DataSource = dv;
    }