C# - Web DataGrid

DataGrid 8. rész

forráskód letöltése
A sorozat befejező részében azt vizsgáljuk, hogy miként hozhatunk létre olyan oszlopot a táblázatban, mely linkeket tartalmaz. Ezek a linkek bárhova mutathatnak, így tulajdonképpen bármilyen feladat megvalósítható velük. Mostani példában mi arra használjuk ezeket, hogy egy SQL lekérdezés eredményében megjelenő master sorokhoz tartozó detail sorokat megjelenítsük az adott linkre történő kattintáskor.
A mellékelt példa kipróbálásához hozzon létre egy DataGrid08 virtuális könyvtárat a web kiszolgálón, mely mutasson a mellékelt példa könyvtárára. Futtatás előtt a WebForm1.aspx.cs 64. sorában lévő SqlConnection sztringet javítsa úgy, hogy elérhető legyen az ön rendszerében lévő MS SQL szerver.
Nézzük most a megvalósítást. A WebForm-ra miután feltettünk egy DataGrid kontrollt, válasszuk a jobb gombra megjelenő menüből a Property Builder menüpontot. A Columns lapon az Available Columns listából válasszuk a HyperLink Column elemet és mozgassuk át a Selected Columns listájába.
Nézzük milyen lehetőségeink vannak a HyperLinkColumn properties-ben.
A Text mezőben megadhatunk egy tetszőleges feliratot, mely minden cellában megjelenik. Ha cellánként különböző feliratot szeretnénk és az adatforrásban van egy olyan mező, melynek értékeit felhasználhatnánk e célra, akkor a Text field mezőbe írjuk ennek nevét.
Tetszőleges URL-t megadhatunk az URL mezőbe, de lehetőség van az URL format string-nél is egy URL megadásra, melyben kapcsos zárójelek között változót is használhatunk, pl.: WebForm1.aspx?orderid={0}. Ekkor a {0} helyére az URL field mezőben megadott adatforrás adott értéke kerül. Jelen példánknál maradva a {0} helyére az SQL lekérdezés adott sorának az OrderID mezőjének értéke lesz behelyettesítve.
Ennyi előkészítés után most nézzük a forráskódot.
Itt a lap betöltésekor meghívjuk belső ShowData nevű függvényünket, mely egyetlen sztring paramétert vár, melyben az aktuális OrderID értékét kell, hogy átadjuk.
     private void Page_Load(object sender, System.EventArgs e)
    {
      ShowData(Request.QueryString["orderid"]); 
    }
A program működése a ShowData függvényen belül kettéválik. Amikor a program indul, akkor nyilván a felhasználó még nem kattinthatott egyik linkre sem, így az url-ben nem fog szerepelni az OrderID paramétert. Ekkor a fő (master) tábla adatait kell megjelenítenünk, mely tartalmazza a linkeket az adott detail táblára vonatkozólag. Ha valamely linkre kattint a felhasználó, mely mondjuk így néz ki: http://localhost/DataGrid08/WebForm1.aspx?orderid=10254, akkor ott már adott lesz az OrderID paraméter, így megjeleníthetjük a detail táblát. Ezt felhasználva az OrderID paraméter meglététől függően kettéválaszthatjuk a programunk futását a ShowData függvényen belül.
Első lépésként létrehozunk egy kapcsolatot az SQL szerverrel.
    private void ShowData(string id)
    {
      SqlConnection connection = new SqlConnection("data source=as1\\as1sql;user id=sa;password=;initial catalog=northwind");
      connection.Open();
      ...
Ezt követően ellenőrizzük, hogy az OrderID paraméter adott-e. Ha nem, akkor az Orders táblára futtatunk egy lekérdezést, ellenkező esetben az Order Details táblára.
      if (id == null)
      {
        da = new SqlDataAdapter("select OrderID, CustomerID from Orders", connection);
      }
      else
      {
        da = new SqlDataAdapter("select * from \"Order Details\" where OrderID=" + id, connection);
      }
Ezt követően már csak az adatok megjelenítése marad hátra, mely a szokásos módon történik.
      da.Fill(ds, "Orders");            
      DataGrid1.DataSource = new DataView(ds.Tables["Orders"]);
      DataGrid1.DataBind();      
    }

DataGrid cikksorozat