A DataSet létrehozása
Miután létrehoztuk az új projektet készítsünk ismét egy DataSet-et. Ehhez válasszuk a Project - Add New Item menüpontot és megjelenő ablakban válasszuk a DataSet elemet. A létrejött lapra tegyünk fel két Element objektumot a Toolbox-ról. Ezek képviselik majd a két táblát.
Hagyjuk element1 és element2 alapértelmezett néven ezt a két objektumot. Hozzuk most létre a szerkezetüket. Az element1 esetében legyen egy „id” nevű oszlop int típussal és legyen egy „a” nevű oszlop string típussal.
Az element2 esetében szintén egy int típusú „id” nevű oszlopot hozzunk létre, majd egy „b” nevű string típusú oszlopot.
A reláció kialakításához szükségünk lesz egy olyan oszlopra is, mely egyedi adatokat tárol. Ez lesz a kulcs, aminek a segítségével a két tábla összekötését elvégezhetjük. Ezt az elsődleges kulcsot a következő módon hozhatjuk létre: a Toolbox-on fogjuk meg a Key objektumot és húzzuk az element1 tábla id mezőjére. Ekkor megjelenik egy Edit Key nevű ablak itt ellenőrizhetjük, hogy jó helyre húztuk-e a Key objektumot, illetve megadhatjuk a további szükséges adatait. A Name mezőbe kerül a kulcs neve, ezt hagyhatjuk alapértelmezett néven. Az Element listából kell kiválasztani, hogy melyik táblánkhoz készítjük a kulcsot, míg a Fields-nél a kiválasztott oszlop látható, melyek most element1 és id neveket kell hogy tartalmazzanak, ha jó helyre húztuk a Key-t. Ha más lenne, akkor javítsuk. Az OK gomb előtt még jelöljük be a Dataset primary key opciót megadva ezzel, hogy az adatforrásunkban ezt az oszlopot tekintjük elsődleges kulcsnak.

Most következik a két tábla közötti reláció létrehozása. Ehhez fogjunk meg a Toolbox-ról egy Relation nevű objektumot és húzzuk az element1 nevű objektumunkra. Ekkor ismét megjelenik egy ablak Edit Relation névvel, ahol elvégezhetjük a szükséges beállításokat. Itt a Parent element mezőbe az element1 név kerül, a Child element-nél az element2-nek kell szerepelnie. A Key mezőbe értelemszerűen az imént létrehozott kulcs nevét kell megadni. A Fields táblázatába az „id” nevű oszlopok kerülnek, mivel mind a két táblánknál ezt a nevet adtuk azok első oszlopánál, melyek alapján az összekötést elvégezzük. Ezzel a reláció szükséges dolgait beállítottuk, most zárhatjuk az ablakot az OK gombbal.
Ha mindent jól állítottunk be, akkor most már készen is vagyunk. Látnunk kell a két táblát, azok oszlopainak neveivel. Meg kell jelennie egy kis kulcsnak az element1 id oszlopánál jelezve, hogy ez az elsődleges kulcsunk. Ezen kívül a relációnak is meg kell jelennie egy grafikus objektumként, mely összeköti az element1 és elemenet2 objektumokat.
Ha most bármely elemre kattintunk, akkor a Properties ablakon keresztül még minden eddig megadott értéket tudunk módosítani.
Az elkészült adatkészletnek ismét csak érdemes tanulmányozni a Dataset1.cs forráskódját, melyből sok minden kiderül a használatával kapcsolatban.
A példaprogram
Nézzük ezek után, hogy miként tudjuk most ezt az adatkészletet programból felhasználni, hogyan hozhatunk létre új sorokat és miként jeleníthetjük meg az adatokat egyetlen DataGrid-ben.
Első lépés most is az lesz, hogy létrehozunk egy példányt a DataSet-ből.
private void button1_Click(object sender, System.EventArgs e)
{
Dataset1 ds = new Dataset1();
Az új sorok létrehozásához készítünk egy element1Row típusú változót, mely az első adattáblának sorát képviseli.
Ezt követően egy ciklust indítunk, melyben létrehozunk egy-egy sort az első adattáblához. Ehhez az element1 osztály Addelement1Row függvényét használjuk mely két paramétert vár: az „id” és az „a” oszlop értékét. A függvény visszatérési értékként egy element1Row típusú objektumot ad, mely az imént létrehozott sort tárolja.
for (int i=1; i<=10; i++)
{
er = ds.element1.Addelement1Row(i, DateTime.Now.AddDays(i).ToShortDateString());
Most egy második ciklust indítunk, melyben létrehozzuk az adott sorhoz tartozó detail sorokat az element2 táblában. Ehhez az element2 osztály Addelement2Row függvényét használjuk fel, melynek első paraméterében a master tábla azon sorát adjuk át, melyhez a detail sorok tartozni fognak. A második paraméterbe a „b” nevű oszlop értéke kerül. Ez esetben az element2 tábla „id” oszlopának nem mi adjuk az értéket közvetlenül, hanem az majd a master tábla adott sorának „id” mezőjéből kerül át. Ez biztosítja, hogy a két tábla sorai mindig a megfelelő módon legyenek összekötve.
for (int l=1; l<=5; l++)
{
ds.element2.Addelement2Row(er, (i*l).ToString("00000"));
}
}
A ciklusok futásának végén nincs más dolgunk mint a master tábla, vagyis az element1 adatait hozzárendelnünk a DataGrid-hez.
dataGrid1.DataSource=ds.element1.DefaultView;
}
A DataGrid-ben master-detail esetén úgy jelennek meg az element1 tábla sorai, hogy mindegyik előtt egy kis plusz jel lesz látható, ahová detail sor is tartozik. Erre kattintva egy link jelenik meg, melyet kiválasztva megtekinthetjük a DataGrid-en belül az adott master sorhoz tartozó detail sorokat is.