C# - Adatok hozzákötése tetszőleges kontrollokhoz

forráskód letöltése
Ebből a cikkből megtudhatjuk, hogy miként köthetjük egy tetszőleges adattábla egy mezőjét egy tetszőleges kontrollhoz. Így például egy MS SQL adatbázis egy táblájának mezőjét megjeleníthetjük például néhány TextBox-ban is.
A mellékelt példa futtatása előtt a Form1.cs 170. sorában meg kell adnia az adatbázis kapcsolat létrehozásához a szerver és bejelentkező nevet valamint jelszavát.
Szinte minden vezérlőnél találunk egy DataBindings property-t, melyen keresztül elvégezhető ez a funkció. Nézzük miként valósítható meg ez a gyakorlatban.
Először is létrehozunk egy kapcsolatot az MS SQL szerver Northwind példa adatbázisával.
Ha ez adott, akkor futtatunk egy egyszerű lekérdezést, mely visszaadja a Products tábla adatait. Majd egy DataSet osztályban eltároljuk a lekérdezés eredményét.
      SqlConnection connection = new SqlConnection("Data Source=as1;uid=sa;password=skd;initial catalog=Northwind;Connect Timeout=3");
      connection.Open();
      SqlDataAdapter da = new SqlDataAdapter("select * from Products", connection);
      da.Fill(ds, "Products");
Majd ezt követően kapcsolhatjuk az adatokat a vezérlőkhöz. Ehhez az adott vezérlő Bindings property-ét használhatjuk fel, mely ControlBindingsCollection típusú. Ez a property minden RichControl-ból származó osztályban megtalálható. A ControlBindingsCollection osztályban találunk egy Add nevű függvényt. Ennél első paraméterként annak a property-nek a nevét kell megadnunk sztringként, amelyhez szeretnénk hozzákötni az adatokat. Ez jelen esetünkben mind a Label, mind a TextBox esetén a Text property lesz. Második paraméterben az adatforrás objektumát adjuk meg, mely most a DataSource osztályunk lesz. Végül harmadik paraméterként az adatforrás azon tagjára kell hivatkoznunk, mely a tényleges adatot szolgáltatja az adatforráson belül. Ez most a Products tábla egy-egy mezőjének a nevét fogja jelenteni.
      label1.DataBindings.Add("Text", ds, "Products.ProductID");
      textBox1.DataBindings.Add("Text", ds, "Products.ProductName");
      textBox2.DataBindings.Add("Text", ds, "Products.QuantityPerUnit");
      textBox3.DataBindings.Add("Text", ds, "Products.UnitPrice");
Ettől kezdve megjelenik az aktuális rekord megadott mezőinek tartalma a hozzájuk kötött vezérlőkben. Most felmerül a kérdés, hogy miként tudjuk változtatni az aktuális rekordot és ezzel mindig új és új adatokat megjeleníteni a vezérlőkben. Ehhez a BindingContext property-t hívhatjuk segítségül, mely szintén minden RichControl-ból származó osztálynak része. Ezen keresztül vezérelhetjük az összekapcsolásokat, így például megoldható egyszerűen, hogy a következő, vagy az előző rekordra ugorjunk. Ehhez nincs más teendőnk, mint a Products táblához kötődő kapcsolatunk Position property-jének az értékét növeljük, illetve csökkentsük attól függően, hogy a következő, vagy az előző rekordra vagyunk-e kíváncsiak.
      protected void button2_Click (object sender, System.EventArgs e)
      {
        this.BindingContext[ds, "Products"].Position--;
      }
      protected void button3_Click (object sender, System.EventArgs e)
      {
        this.BindingContext[ds, "Products"].Position++;
      }