
A példaprogram használata előtt létre kell hozni egy SOUSER sémát az Oracle adatbázis-rendszerünkben, és fel kell ruházni DBA jogosultsággal. A sémába bejelentkezve le kell viszont futtatni a mellékelt Oracle.sql nevű parancsállományt a hivatkozott további objektumok létrehozásához.
A Tip01 projekt futtatásakor, amennyiben a Table1 tábla nem rendelkezik rekordokkal, első lépésként fel kell tölteni adatokkal programból (Feltöltés gomb).
Az Oracle rendszer használatakor igen nagy segítséget jelent, hogy minden egyes adattábláról rendelkezésre áll egy konstans információ azzal kapcsolatban, hogy hány rekordot is tartalmaz a tábla. Ez a ROWNUM változó értéke, melyet most felhasználunk a feladatok megoldására. Az következő két, Oracle-t használó példa a Tip01 projektben található.
Tábla utolsó rekordjának lekérdezése
A feladat egyértelmű lenne, ha programból szeretnénk az utolsó rekordot lekérdezni, hiszen ekkor csak a táblát tartalmazó objektum megfelelő property-jét kellene megvizsgálni. Azonban akkor, amikor a művelet eredményére egy tárolt alprogram részművelete támaszkodik, és nem léphetünk ki a hívó kódba, egy SQL utasítást kell használnunk.
A példaprogramunkban az űrlapra helyezett TabControl UTOLSÓ REKORD füle alatt kérdezhetjük le az utolsó rekord értékeit a LEKÉRDEZÉS gomb megnyomásával. Az eredmény a három TextBox kontrolban látható majd.
Ehhez nem kell mást tennünk, mint az Oracle adatbázisklienshez történő kapcsolódás után az OleDbCommand komponens CommandText property-jében megadni a következő SQL utasítást:
SELECT *
FROM (SELECT rownum r,Table1.* FROM Table1 ORDER BY ID) WHERE r IN(SELECT count(*) FROM Table1)
A tábla minden n. rekordjának lekérdezése
A MINDENM N. REKORD fül alatt található szövegmezőben meg kell adnunk egy számot 1 és 99 közt, majd meg kell nyomnunk a LEKÉRDEZÉS a Table1 táblában található minden n. rekord lekérdezéséhez.
A megoldás itt is egy SQL utasítás, melyet az OleDbDataAdapter komponens megfelelő property-jében kell elhelyeznünk, és feltöltenünk az eredménnyel a DataTable objektumot.
Az SQL utasítás pedig:
SELECT ID, NAME, PRICE
FROM (SELECT Table1.*, rownum r FROM Table1)
WHERE MOD(r," + nr.ToString() + ") = 0
A parancs karakterláncában a változó értéke az az „n” szám, melyet megadtunk a szövegmezőben.
Oszlopok cseréje DataGrid kontrolban
A példaalkalmazás a Tip02 projektben található.
Példánkban a mellékelt Employees.xml állománnyal töltjük fel induláskor a DataGrid kontrolunkat, majd a szerkesztőmezőkben megadott két számnak megfelelő oszlop helyét megcseréljük a kontrolban.
Ehhez felhasználjuk a DataGridTableStyle osztály lehetőségeit, melynek segítségével tábla-sémákat deklarálhatunk a DataGrid kontrolban, milyen stílusban szeretnénk megjeleníteni adatainkat.
A megoldásban nem teszünk mást, mint megadunk egy kezdeti stílust a kontrolhoz:
...
DataGridTableStyle tStyle = new DataGridTableStyle();
tStyle.MappingName = ds.Tables[0].TableName;
dataGrid1.TableStyles.Add(tStyle);
A táblastílusok minden oszlopra oszlopstílusokat is tartalmaznak, ezt reprezentálja a DataGridColumnStyle osztály. A DataGrid kontrol eredeti stílusának elemein végighaladva megkeressük a megadott oszlopokat a listában, ezeket felfűzzük egy új táblastílus objektumra, majd az új stílust adjuk vissza DataGrid kontrolnak a régi eldobása után.
A műveletet a ChangeColumns metódusban végezzük el, melynek paramétereiben megadtuk a két cserélendő oszlop sorszámát. Tehát lekérdezzük az eredeti sorrendet tartalmazó stílust:
DataGridTableStyle etStyle = dataGrid1.TableStyles[0];
Megvizsgáljuk hány elemet tartalmaz:
int counter = etStyle.GridColumnStyles.Count;
Létrehozzuk az új stílust az eredeti névvel:
DataGridTableStyle newStyle = new DataGridTableStyle();
newStyle.MappingName = dataGrid1.TableStyles[0].MappingName;
Majd az elemeken végigmenve az új sorrendre tekintettel felfűzzük az oszlopstílusokat:
for(int i = 0; i < counter; ++i)
{
Ha megtaláltuk az első megadott számnak megfelelő oszlopot, akkor a következő elemként a másik számnak megfelelő oszlopot fűzzük fel:
if (i == col1)
{ newStyle.GridColumnStyles.Add(etStyle.GridColumnStyles[col2]);
}
if (i == col2)
{
newStyle.GridColumnStyles.Add(etStyle.GridColumnStyles[col1]);
}
...
}
Ha feltöltöttük az új DataGridTableStyle objektumot, töröljük a régit:
dataGrid1.TableStyles.Remove(etStyle);
Majd felfűzzük az újat:
dataGrid1.TableStyles.Add(newStyle);