
A példa az MS SQL Server Northwind adatbázisát használja. A program megnyitása előtt a mellékelt Address_Table.sql script lefuttatásával létre kell hozni és fel kell tölteni adatokkal a program által használt adatbázis táblát.
Indítás előtt az SqlConnection komponens ConnectionString property-jének, valamint az SqlDataAdapter komponens SelectCommand objektumának CommandText property-jének értéket kell adni.
A melléklet két project-et tartalmaz, az egyik a komponens project-je, míg a másikban a használatát demonstráló Windows-os alkalmazás található.
Az új kontrol létrehozása a szokásos módon történik, a File – New – Project menüpont lenyomása után megjelenő ablakban válasszuk a Visual C# Project elemei közül a Windows Control Library-t.
A komponens működési elve
Első lépésként property-ket adunk a komponensünkhöz, melyek segítségével kommunikál a külvilággal. A DataSourceName property az egyetlen, mely megjelenik a szerkesztő ablakban és válik szerkeszthetővé tervezési időben is. A másik három property csak futási időben állítható, ezeket a befogadó alkalmazás írja és olvassa. A property-k természetesen változókat állítanak. A property-k:
| Property neve |
Típus |
Megjegyzés |
| DataSourceName |
string |
Az adatforrás neve, melyhez a komponens kapcsolódik. |
| AdapterString |
string |
A Select Utasítás „CommandText” property-je |
| ConnectionString |
string |
Az adatbázis kapcsolat „ConnectionString” property-je |
| Position |
int |
Az adatforrás aktuális rekordjának száma |
A komponens úgy működik, hogy a felhasználó alkalmazásból kapott paraméterekkel létrehozza az adatbázis kapcsolatot, feltölt egy adatforrást, melyet hozzákapcsol egy, az alkalmazásban felhasznált vizuális komponenshez, jelen esetben egy DataGrid komponenshez. A felhasználó által a komponens segítségével elvégzett műveletek a komponens adatforrásán hajtódnak végre, amely módosítások rögtön láthatóak a vizuális komponensben.
A komponens létrehozásakor feltesszük a Button osztályba tartozó vezérlőket egy Form-ra, majd megvalósítjuk a vezérlőkhöz tartozó kezelőfüggvényeket. A kezelőfüggvények kódja állítja a rekordmutatót, valamint végzi el az adatbázis műveleteket.
A komponens helyes működése azon alapszik, hogy pontosan ismerje a rekordmutató pillanatnyi helyzetét, melyet részben a felhasználó módosít; valamint, hogy a rekordmutató állásától függően elérhetővé, illetve elérhetetlenné tegyen bizonyos nyomógombokat, vagyis a hozzájuk kapcsolódó funkciókat. A komponens a gombok kezelőfüggvényein kívül két függvényt tartalmaz:
- Kiolvassa a Position property értékét
public void ReadPositionProperty()
{
this.BindingContext[dataSet,dsname].Position=position;
SetButtons();
}
- Műveletek után állítja a komponens navigáló gombjainak elérhetőségét, attól függően, hogy a rekordmutató éppen hol áll.
if (this.BindingContext[dataSet,dsname].Position == 0){
n0.Enabled = n1.Enabled = false;
n2.Enabled = n3.Enabled = true;
}
else if ((this.BindingContext[dataSet,dsname].Position>0) && (this.BindingContext[dataSet,dsname].Position!=dataSet.Tables[dsname].Rows.Count-1)){
n0.Enabled = n1.Enabled = true;
n2.Enabled = n3.Enabled = true;
}
else if (this.BindingContext[dataSet,dsname].Position==dataSet.Tables[dsname].Rows.Count-1){
n0.Enabled = n1.Enabled = true;
n2.Enabled = n3.Enabled = false;
}
A komponensen belül meg kell valósítani egy osztályt, mely az egyedi kivételek kezelését teszi lehetővé. A kivételkezelő osztály a karakter literálokkal végzett műveletek esetén előforduló hibák központi kezelésére szolgál.
public class MyException:ApplicationException
{
public MyException(string msg):base(msg){}
}
A komponens létrejöttekor beállítja a kezdeti értékeit, így a vizuálisan megjelenítő komponensben betöltődéskor az adatforrás aktuális adatai szerepelnek. A komponens jelenleg MS SQL Server alkalmazással képes együttműködni.
A project fordítása után a kontrol kész. Felhasználása előtt a kontrolt fel kell tenni a ToolBox-ra a szokásos módon: kattintsunk a ToolBox valamely lapján az egér jobb gombjával, majd a megjelenő menüből válasszuk ki a Customize ToolBox pontot, a megjelenő ablakban a .NET Frameworks Components fület. A Browse gombbal keressük elő az imént létrehozott .DLL-t. A ToolBox-on ezután megjelenik a kontrol, melyet szabadon felhasználhatunk.
A komponenst felhasználó alkalmazás
A befogadó alkalmazásban néhány dologra kell figyelmet fordítani.
Az alkalmazásnak tartalmaznia kell SqlDataAdapter és SqlConnection komponenseket, melyeket a kívánt adathalmaztól függően paraméterezni kell.
A komponenst tartalmazó dialógusablak betöltődésekor a komponens absztrakt adattárolóját, mely jelen esetben egy DataSet komponens, fel kell tölteni adatokkal, majd a vizuális komponensnek át kell adni adatforrásként:
public Form1()
{
InitializeComponent();
adapter.Fill(dbNavigator.dataSet,"Address_Table");
dataGrid1.DataSource=dbNavigator.dataSet;
}
A komponens Properties ablakban megjelenő property-jét be kell állítani a megfelelő értékre, jelen esetben a „Address_Table” értékre.
Gondoskodni kell arról is, hogy a komponens másik három property-je is értéket kapjon. Ezeket a Form betöltődésekor tehetjük meg.
this.dbNavigator.AdapterString = "SELECT * FROM Address_Table";
...
this.dbNavigator.ConnectionString=connection.ConnectionString;
Az alkalmazásban egy függvényt kell megvalósítani, hogy a vezérlő pontosan ismerje a rekordmutató értékét. Ez nem más, mint a DataGrid komponens egy eseménykezelője.
private void dataGrid1_CurrentCellChanged(object sender,System.EventArgs e)
{
dbNavigator.Position = dataGrid1.CurrentCell.RowNumber;
dbNavigator.ReadPositionProperty();
}