C# - A DataTable osztály lehetőségei

DataTable 1. rész

forráskód letöltése
Adatokat nem csak úgy kezelhetünk egy DataGrid-ben, hogy azok valóságos adatbázishoz kapcsolódnak. Lehetőségünk van arra is, hogy egy tetszőleges adatforrást használjuk, vagy akár programból generáljunk adatokat, melyeket ezek után épp úgy kezelhetünk, mintha egy tetszőleges típusú adatbázis egy-egy táblája lenne.
A megoldás kulcsa a DataTable osztályban rejlik. Ezt az osztályt használhatjuk valós adattáblák kezeléséhez épp úgy, mint a programból generált adatainkhoz. Mostani példában ez utóbbit vizsgáljuk meg részletesebben.
Egy dolog biztos: a használathoz szükségünk lesz a DataTable típusú változóra.
    private DataTable dt;
Hozzuk is létre egy példányát e típusnak a Form konstruktoránál. A DataTable konstruktorának paraméterében megadhatjuk a tábla nevét, mellyel a későbbiek folyamán hivatkozhatunk rá.
    public Form1()
    {
       ...
      dt = new DataTable("Teszt");
    }
Adott most már a tábla, de se szerkezete, se tartalma nincs.
Ezen változtatva hozzunk létre három oszlopot a táblába. Tehetjük ezt a DataTable Columns property-jén keresztül, annak Add függvényét meghívva. Ez paraméterként a DataColumn osztály egy példányát várja. Ezt létrehozhatjuk akár itt is, a konstruktorában pedig rendelkezhetünk arról, hogy mi legyen az oszlop neve és típusa.
    private void button1_Click(object sender, System.EventArgs e)
    { 
      dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
      dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
      dt.Columns.Add(new DataColumn("DateValue", typeof(DateTime)));
Most hogy már adott a szerkezet, csak fel kell töltenünk a táblát adattal. Ehhez szükség lesz egy DataRow típusú változóra, melyben az adott sor tartalmát állítjuk össze.
      DataRow dr;
      DateTime d = DateTime.Now;
Adjunk mondjuk tíz új sort a táblához egy ciklussal.
      for (int i=1; i<=10; i++) 
      {                
Itt létrehozunk egy új sort tartalmazó objektumot, melyhez a DataTable NewRow függvényét kell csak meghívnunk. Visszatérési értékként egy DataRow objektumot kapunk, melyet felhasználhatunk a sor adatainak manipulálására.
        dr = dt.NewRow();
Adott tehát egy új, üres sor. Most jöhet a DataRow típusú változónk, mintha csak egy tömb lenne, minden mezőnek értéket adhatunk.
        dr[0] = i;
        dr[1] = "String " + i.ToString();
        dr[2] = d.AddDays(i);
Ha megvan a sor, akkor már csak hozzá kell adnunk a DataTable objektumhoz. Ehhez annak Rows property-jén keresztül vezet az út, méghozzá az Add függvényét meghívva. Paraméterként az imént létrehozott és adatokkal feltöltött DataRow típusú objektumot kell átadnunk.
        dt.Rows.Add(dr);
      }
Miután elkészült a tábla, már csak össze kell kötnünk a DataGrid-del. Ezt úgy tehetjük, hogy annak DataSource property-jének értékül adjuk a DataTable DefaultView property-jén keresztül lekérhető DataView típusú objektumot.
      dataGrid1.DataSource = dt.DefaultView;
    }
Nézzük mire is jó még egy DataTable. Sok mindenre. Többek között arra, hogy egyszerűbb műveleteket végezzünk el az adatain. Így például, ha van egy számokat tartalmazó oszlopunk és ezek értékeinek összegére lennénk kíváncsiak, akkor ezt egyszerűen lekérdezhetjük, ha a DataTable Compute függvényét használjuk. Itt egy sztringben fogalmazhatjuk meg az elvégzendő műveletet. Például a sum(IntegerValue) kifejezéssel az IntegerValue nevű oszlop adatait összegezhetjük. Második paraméterként egy szűrő feltételt is megadhatunk szükség esetén, így nem feltétlenül kell elvégezni a számítási műveletet az összes sorra nézve.
    private void button2_Click(object sender, System.EventArgs e)
    {
      label1.Text = dt.Compute("sum(IntegerValue)", "").ToString();
    }
További új sorok hozzáadására természetesen bármikor van lehetőségünk és így a DataGrid folyamatosan bővíthető.
Az eljárás hasonló, mint amit a tábla generálásakor használtunk. Itt is egy DataRow objektumot használunk fel egy sornyi adat összeállításához, majd kitöltjük az egyes cellák értékét most egy véletlenszerű értékkel és a végén a DataTable objektumunk Rows property-jén keresztül, annak Add függvényével hozzáadjuk a már meglévő sorainkhoz.
    private void button3_Click(object sender, System.EventArgs e)
    {
      DataRow dr;
      DateTime d = DateTime.Now;
      dr = dt.NewRow();
      Random r = new Random();
      dr[0] = r.Next(1000);
      dr[1] = "String " + r.Next(1000).ToString();
      dr[2] = d.AddDays(r.Next(1000));
      dt.Rows.Add(dr);
    }

DataTable cikksorozat

A DataTable osztály lehetőségei - DataTable 1. rész

DataTable osztály lehetőségei - DataTable 2. rész