HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

DataColumn osztály használata


Példaprogram letöltése

8373 bájt

Tetszőleges adatok megjelenítésekor az adathalmaz egyes oszlopait a System.Data.DataColumn osztály írja le. Ennek segítségével készíthetünk akár automatikusan számított értékeket tartalmazó oszlopokat, vagy akár automatikusan számozódó oszlopokat, rendelkezhetünk az alapértelmezett értékről és sok egyéb hasznos dolog sorsáról, így bármilyen adatforrást is használjunk érdemes tudnunk, hogy milyen lehetőségeink vannak az adatoszlopokkal.

Tekintsük először át, hogy milyen lehetőségek adottak a DataColumn osztályban.
AllowDBNull
Osztály: System.Data.DataColumn
public bool AllowDBNull {get; set;}
Ha az AllowDBNull property értéke igaz, akkor lehetőség van arra, hogy az adott oszlopban ne adjunk meg értéket.
AutoIncrement
Osztály: System.Data.DataColumn
public bool AutoIncrement {get; set;}
Ha az AutoIncrement property értéke igaz, akkor az adott oszlopba újonnan beszúrt soroknál ezen oszlop értéke automatikusan növekszik.
Megjegyzés
Ne felejtsük el, hogy ez csak új sor hozzáadása esetén fog működni, a már meglévő sorok nem kapnak sorszámot, valamint azt se, hogy csak integer típusú oszlopra használjuk ezt a lehetőséget.
AutoIncrementSeed
Osztály: System.Data.DataColumn
public long AutoIncrementSeed {get; set;}
Ha az AutoIncrement property értéke igaz, akkor az AutoIncrementSeed fogja meghatározni azt a kezdő sorszámot, mellyel a számozás elindul.
AutoIncrementStep
Osztály: System.Data.DataColumn
public long AutoIncrementStep {get; set;}
Ha az AutoIncrement property értéke igaz, akkor az AutoIncrementStep fogja meghatározni, hogy mennyivel növekedjen a sorszám.
ColumnName
Osztály: System.Data.DataColumn
public string ColumnName {get; set;}
Az oszlop neve adható meg sztringként. Ha ezt nem adjuk meg, akkor automatikusan a Column szó és egy sorszám kerül átadásra e property részére.
DataType
Osztály: System.Data.DataColumn
public Type DataType {get; set;}
Az oszlop létrehozásakor meg kell adnunk, hogy milyen típusú adatokat szeretnénk kezelni. Erre szolgál a DataType property, mely az alábbi típusok egyikét várja:
  • Boolean
  • Byte
  • Char
  • DateTime
  • Decimal
  • Double
  • Int16
  • Int32
  • Int64
  • SByte
  • Single
  • String
  • TimeSpan
  • UInt16
  • UInt32
  • UInt64
DefaultValue
Osztály: System.Data.DataColumn
public object DefaultValue {get; set;}
Ha egy új sor beszúrásakor valamely oszlop nem kap értéket, de a DefaultValue tartalmaz értéket, akkor ez kerül átadásra az új sorba.
Megjegyzés
Ha az AutoIncrement property igaz, akkor nem lesz felhasználva a DefaultValue értéke.
Expression
Osztály: System.Data.DataColumn
public string Expression {get; set;}
Lehetőségünk van arra is, hogy egy oszlop tartalma ne fizikailag tárolt adatok alapján kerüljön meghatározásra, hanem számítás alapján. Ez egy nagyszerű lehetőség, hiszen nem kell minden olyan adatot tárolnunk, mely egy, vagy több másik adatból valamilyen számítással mindig előállítható. Például egy számlázó rendszerben nem kell eltárolni a bruttó oszlop értékeit, hiszen az a nettó árból és az ÁFÁ-ból számítható.
A megadandó kifejezést sztringként kell átadnunk, melyben szerepelhetnek más oszlopok nevei, matematikai műveletek, konstans értékek.
Megadható operátorok
<
>
<=
>=
<>
=
IN
LIKE
+ (addition)
- (subtraction)
* (multiplication)
/ (division)
% (modulus)
Használható függvények
Sum
Avg
Min
Max
Count
StDev
Var
Convert
Len
IsNull
IIF
SubString
Példa
datacolumn.Expression = "Érték * 2";
datacolumn.Expression = "LogDate < #1/1/2002#"";
datacolumn.Expression = "StrColumn = 'string'";
datacolumn.Expression = "StrColumn LIKE '*string'";
datacolumn.Expression = "StrColumn LIKE '*string*'";
datacolumn.Expression = "StrColumn LIKE 'string*'";
datacolumn.Expression = "Max(Érték)";
datacolumn.Expression = "SUBSTRING(Telefon, 1, 2)";
Megjegyzés
LIKE használata esetén a * karakter csak a megadott sztring elején vagy a végén használható, annak közepén nem. Így például ez helytelen lenne: datacolumn.Expression = "StrColumn LIKE 'st*ring'";
ExtendedProperties
Osztály: System.Data.DataColumn
public PropertyCollection ExtendedProperties {get;}
Minden oszlophoz saját használatra rendelhetünk adatokat. Ehhez egy PropertyCollection típusú osztály áll rendelkezésünkre, ahol minden adathoz egy-egy név tartozik.
MaxLength
Osztály: System.Data.DataColumn
public int MaxLength {get; set;}
Az adott oszlopba bevihető karakterek száma.
Megjegyzés
Ha az oszlop nem szöveges típusú, akkor e property nem kerül figyelembevételre.
Namespace
Osztály: System.Data.DataColumn
public string Namespace {get; set;}
A DataTable, illetve a DataSet osztályokban található ReadXml, WriteXml, ReadXmlSchema és WriteXmlSchema függvények használatakor szükséges névtér megnevezése adható meg.
Ordinal
Osztály: System.Data.DataColumn
public int Ordinal {get;}
A property segítségével meghatározhatjuk, hogy az adott oszlop hányadik az oszlopok között.
Prefix
Osztály: System.Data.DataColumn
public string Prefix {get; set;}
A Prefix property-ben megadott sztring kerül használatra az XML dokumentumban annak elemeinek azonosítására.
ReadOnly
Osztály: System.Data.DataColumn
public bool ReadOnly {get; set;}
Igaz érték esetén az oszlop adatai csak olvashatóak lesznek.
Table
Osztály: System.Data.DataColumn
public DataTable Table {get;}
Az oszlop része egy DataTable-nak, akkor ez a Table property-n keresztül elérhető.
Unique
Osztály: System.Data.DataColumn
public bool Unique {get; set;}
Az oszlop értékei között nem lehet két azonos, mindegyiknek egyedinek kell lennie, ha a Unique property értéke igaz.
Példaprogram
Nézzük miként is megy mindez a gyakorlatban: létrehozunk először egy DataTable-t, majd ehhez oszlopokat.
    private void button1_Click(object sender, System.EventArgs e)
    {
      dt = new DataTable("Products");
Az első oszlopban egy Int32 típusú oszlopot hozunk létre, melynek Sorszám nevet adunk és amely automatikusan sorszámozott lesz egytől kezdve és egyesével növekedve. Mivel erre az adatok feltöltésénél, szerkesztésénél nem lesz gondunk, így csak olvashatóra állítjuk a ReadOnly property segítségével. Végül a DataTable Columns property-jének Add függvényével hozzáadjuk a létrehozott oszlopot.
      DataColumn dc1 = new DataColumn();
      dc1.DataType = System.Type.GetType("System.Int32"); 
      dc1.ColumnName = "Sorszám";
      dc1.AutoIncrement = true;
      dc1.AutoIncrementSeed = 1;
      dc1.AutoIncrementStep = 1;
      dc1.ReadOnly = true;      
      dt.Columns.Add(dc1);
A második oszlopnál a String típust választjuk és Idő nevet adjuk. Itt korlátozzuk a maximálisan beírható karakterek számát is 10-ben.
      DataColumn dc2 = new DataColumn();
      dc2.DataType = System.Type.GetType("System.String"); 
      dc2.ColumnName = "Idő";
      dc2.MaxLength = 10;
      dt.Columns.Add(dc2);
Mivel a DataTable Columns property-jének Add függvénye visszaad egy referenciát az éppen létrehozott DataColumn-ról, így az alábbi módszerrel is létrehozhatunk új oszlopot. Ennél alapértelmezett értékként 200-at adunk meg, így ha egy új sornál nem kapna értéket ezen oszlop, akkor az 200 lesz.
      DataColumn dc = dt.Columns.Add("Érték", System.Type.GetType("System.Int32"));
      dc.DefaultValue = 200;
Létrehozunk egy számított mezőt is, mely az előző Érték nevű mezőből jön létre úgy, hogy annak aktuális értékét szorozzuk kettővel. Ennél az oszlopnál kihasználjuk az ExtendedProperties property által nyújtott lehetőséget is és elhelyezünk egy Megjegyzés nevű adatot, melyhez egy kis súgó szöveget írunk a mezőhöz későbbi felhasználás céljából.
      dc = dt.Columns.Add("Dupla érték", System.Type.GetType("System.Int32"));
      dc.Expression = "Érték * 2";
      dc.ExtendedProperties.Add("Megjegyzés", "A Dupla érték oszlop az Érték oszlop alapján kerül kiszámításra");
Végül már csak a Form-on lévő DataGrid-hez kell kötnünk az adatokat, hogy azok láthatóak is legyenek.
      dataGrid1.DataSource = dt.DefaultView;    
    }
Hozzunk most létre új sorokat ebbe a táblába, de úgy, hogy csak az Idő oszlop részére adjuk meg az adatot, méghozzá az aktuális időpont alapján. Mivel az egyik oszlop automatikusan sorszámozott, a másiknak van alapértelmezett értéke és van egy számított mezőnk is, így minden új sornál mind a négy mező kap valamilyen módon értéket.
    private void button2_Click(object sender, System.EventArgs e)
    {
      DataRow dr;
      dr = dt.NewRow();
      dr["Idő"] = DateTime.Now.ToLongTimeString();
      dt.Rows.Add(dr);
    }
Most vizsgáljuk meg, hogy az ExtendedProperties-ben tárolt adat miként használható fel. Ez viszonylag egyszerű feladat, hiszen csak a megfelelő property-t kell kiolvasni.
    private void button3_Click(object sender, System.EventArgs e)
    {
      label1.Text = dt.Columns["Dupla érték"].ExtendedProperties["Megjegyzés"].ToString();
    }
Amint azt a cikk elején már olvasható volt az Ordinal property képes arra, hogy az adott oszlop sorszámát szolgáltassa. Most az Idő oszlop sorszámát határozzuk meg a segítségével.
    private void button4_Click(object sender, System.EventArgs e)
    {
      label1.Text = "Az Idő oszlop sorszáma: " + dt.Columns["Idő"].Ordinal.ToString();
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 15. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |