C# - Tetszőleges lekérdezés séma adatainak megjelenítése egy PropertyGrid kontrolban

forráskód letöltése
Mellékelt példában készítünk egy olyan alkalmazást, mely képes arra, hogy egy PropertyGrid-ben megjelenítsen egy tetszőleges lekérdezés által szolgáltatott adathalmaz sémájának tulajdonságait. Ezáltal a program futás ideje alatt is tájékozódhatunk, hogy a lekérdezés eredményhalmazának egyes oszlopai milyen tulajdonságokkal rendelkeznek.
A mellékelt példa futtatása előtt a Form-on lévő sqlConnection1 kontrol ConnectionString property-jét változtassa meg úgy, hogy elérhető legyen az MS SQL Nortwind példaadatbázisa.
Ahhoz, hogy ezt a Properties ablakot elérjük szükségünk van arra, hogy egy új komponenst vegyünk fel a ToolBox-ra.
Ehhez kattintsunk jobb gombbal a ToolBox-on, majd válasszuk a Customize ToolBox menüpontot. A megjelenő ablakban válasszuk a .NET Frameworks Components lapot, majd keressük elő a PropertyGrid elemet. Az előtte lévő CheckBox-ot jelöljük ki és zárjuk le OK-val az ablakot. Ekkor a ToolBox-ban megjelenik egy új komponens PropertyGrid névvel. Ez lesz a Visual Studio.NET-ben lévő Properties nevű ablak komponense.
Ezek után bármikor, bármely alkalmazásunk Form-jára helyezhetünk ebből a PropertyGrid-ből. Használatához csak annyit kell tennünk, hogy futási időben hozzárendeljük azt az objektumot, melyet kezelni szeretnénk rajta keresztül. Ehhez a PropertyGrid SelectedObject property-ének kell értékül adnunk a kezelendő objektumot.
A lekérdezés futtatása után első lépésként egy ciklus segítségével kiírjuk egy ListBox-ba az eredmény halmaz oszlopainak megnevezését. Amikor a felhasználó a ListBox egy-egy elemére kattint, akkor jelenítjük meg az adott oszlophoz tartozó tulajdonságokat a PropertyGrid-ben.
      for (int i=0; i<dataSet11.Products.Columns.Count; i++)
      {
        listBox1.Items.Add(dataSet11.Products.Columns[i].ColumnName);
      }
A PropertyGrid SelectedObject property-jéhez rendeljük az első oszlopot, így kezdetben ennek tulajdonságait láthatjuk.
      propertyGrid1.SelectedObject = dataSet11.Products.Columns[0];
Amikor a felhasználó rákattint a listBox1 elemére, akkor jön létre a SelectedIndexChanged esemény. Itt meg kell változtatnunk a PropertyGrid-hez kapcsolt objektumot, annak függvényében, hogy melyik elemet választotta a felhasználó a ListBox-ban.
    private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
      propertyGrid1.SelectedObject = dataSet11.Products.Columns[listBox1.SelectedIndex];
    }