HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Szülő-gyermek adatreláció


Példaprogram letöltése

7926 bájt

Két táblát relációba kapcsolva azt vizsgáljuk meg ebben a cikkben, hogy miként jeleníthetjük meg az összetartozó sorokat a szülő, illetve a gyermek táblában.

Mellékelt példa futtatása előtt a Form1.cs 114. sorában az SQL kapcsolat létrehozásánál adja meg saját bejelentkező nevét és jelszavát, valamint a gép nevét, melyen az SQL szerver fut.
A megvalósítandó feladat a Northwind példaadatbázis Orders és Order Details táblájának összekapcsolása lesz az OrderID mezőn keresztül.
Így készítünk egy lekérdezést az Order táblára.
    private void button1_Click(object sender, System.EventArgs e)
    {
      ...
      SqlDataAdapter da1 = new SqlDataAdapter("select * from Orders", connection);
      da1.Fill(ds, "Orders");      
      DataColumn dc1 = ds.Tables["Orders"].Columns["OrderID"];
Majd egy másikat az Order Details táblára.
      SqlDataAdapter da2 = new SqlDataAdapter("select * from \"Order Details\"", connection);
      da2.Fill(ds, "OrderDetails");      
      DataColumn dc2 = ds.Tables["OrderDetails"].Columns["OrderID"];
Mindkét lekérdezésnél létrehoztunk egy-egy DataColumn osztályt, mely az adott tábla OrderID oszlopát tartalmazza. Ezeket felhasználva létrehozhatunk egy DataRelation osztályt, melynek konstruktorában megadjuk a reláció elnevezését, valamint azt a két oszlopot, mely alapján az összekapcsolást el szeretnénk végezni. Ha ez megtörtént, akkor a DataSet osztály Relations property-jében található Add függvényt használva elvégezzük a reláció létrehozását.
      DataRelation dr = new DataRelation("OrdersRelations", dc1, dc2);
      ds.Relations.Add(dr);
Most már könnyedén megjeleníthetjük az adatainkat mondjuk egy ListBox-ban úgy, hogy minden szülő tábla sorához tartozó gyermek sorokat közvetlenül a szülő alá írjuk. Ehhez egy foreach ciklust kezdeményezünk, mely végigmegy a szülő tábla összes során.
      listBox1.BeginUpdate();
      foreach (DataRow r1 in ds.Tables["Orders"].Rows)
      {
A szülő tábla sorát hozzáadjuk a ListBox elemeihez, majd egy újabb foreach ciklussal végigmegyünk azokon a sorokon a gyermek táblában, melyek e szülőhöz tartoznak. Ehhez a DataRow osztály GetChildRows függvényét kell használnunk, melynek paraméterként egy DataRelation osztály példányát kell megadnunk, melyben definiálva van az a kapcsolat, amelyik alapján a leválogatást szeretnénk elvégezni. A GetChildRows függvény visszatérési értéke egy tömb lesz, melynek minden eleme DataRow típusú, így ezen könnyen végigmehetünk a második foreach ciklussal és megjeleníthetjük a gyermek tábla adatait.
        listBox1.Items.Add("[" + r1["OrderID"] + "] " + r1["CustomerID"] + " (" + r1["OrderDate"] + ")");
        foreach (DataRow r2 in r1.GetChildRows(dr))
        {
          listBox1.Items.Add("\t[" + r2["OrderID"] + "] " + r2["UnitPrice"]);
        }
        ...

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2001 évkönyv 418. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |