C# - A DataGridTextBoxColumn osztály

A DataGridColumnStyle osztály leszármazottai 2. rész

forráskód letöltése
A mai cikkben megismerhetjük a DataGridTextBoxColumn osztály egy sajátosságát, melynek segítségével egészen új viselkedésre késztethetjük a DataGrid kontrolunk egy adott celláját. A mellékelt példában azt vizsgáltuk meg, hogy milyen módon jeleníthetünk meg egy cellában adatbeviteli kontrolt, vagy akár egy ComboBox vezérlőt.
A DataGridTextBoxColumn osztály bemutatását property-jeinek ismertetésével kezdjük, hiszen ezek segítségével adhatunk meg egyedi viselkedésformákat.
Alignment
Osztály: DataGridTextBoxColumn
public virtual HorizontalAlignment Alignment {get; set;}
Segítségével megadható, hogy az adott szöveg milyen igazítással kerüljön megjelenítésre az oszlopban. Értékei a HorizontalAlignment felsorolt típus elemei, Left (balra), Right (jobbra), Center (középre).
Format
Osztály: DataGridTextBoxColumn
public string Format {get; set;}
Megadhatunk egy formázókaraktert a megjelenítendő szöveghez.
FormatInfo
Osztály: DataGridTextBoxColumn
public IFormatProvider FormatInfo {get; set;}
Megadhatunk egy konkrét formázó osztályt is a szöveg formázására, mely lehet a NumberFormatInfo, vagy dátumok esetén a DateTimeFormatInfo osztály.
HeaderText
Osztály: DataGridTextBoxColumn
public virtual string HeaderText {get; set;}
Megadhatunk egy szöveget, mely megjelenik az adott oszlop fejlécmezőjében.
MappingName
Osztály: DataGridTextBoxColumn
public string MappingName {get; set;}
Ez az érték a DataColumn osztály ColumnName property-je, így az adott oszlopba, névvel hivatkozva tetszőleges oszlop betölthető.
NullValue
Osztály: DataGridTextBoxColumn
public object NullValue {get; set;}
Megadható, hogy NULL érték esetén milyen objektum kerüljön az adott cellába, milyen érték jelezze ezt az állapotot. Alapértéke a DBNull.Value érték.
PropertyDescriptor
Osztály: DataGridTextBoxColumn
public virtual PropertyDescriptor PropertyDescriptor {set;}
Információkat adhatunk meg az adott oszlop attribútumait illetően.
ReadOnly
Osztály: DataGridTextBoxColumn
public virtual bool ReadOnly {get; set;}
Az adott oszlop csak-olvashatóra állítható, ha a DataColumn objektum elsődleges kulcs deklaráció része, illetőleg AutoIncrement property-je TRUE értékű.
TextBox
Osztály: DataGridTextBoxColumn
public virtual TextBox TextBox {get;}
Ez a property az, melyen keresztül kontrolokat adhatunk az adott oszlophoz, abban megjelenítve, illetve szerkesztve az adott információt. A példában bemutatjuk, hogyan használhatjuk.
Width
Osztály: DataGridTextBoxColumn
public virtual int Width {get; set;}
Megadhatjuk az adott oszlop szélességét pixelben.
A mellékelt példában két DataGrid kontrolt helyeztünk el a Form-on, melyek közül az alsó kontrolban megjelenítjük a teljes adathalmazt, melyet a FillTable beépített metódusban feltöltünk adatokkal. A felső DataGrid kontrolban egyetlen rekordot jelenítünk meg, speciális funkciókkal.
A rekord három cellája közül az elsőben szerkesztéskor – amikor kattintással az inputfókusz rá kerül – egy ComboBox kontrol jelenik meg a feltöltött adathalmaz (DataTable objektum) azonosítóit tartalmazva, míg a másik két cella egy-egy TextBox kontrolt jelenít meg a ComboBox-ban kiválasztott azonosítóhoz tartozó név, és ár értékekkel.
A ComboBox kontrolban változtatva a kijelölt azonosító indexét, a másik két TextBox-ban mindig az aktuális rekord értékeit jelenítjük meg.
A kontrolok megjelenítésének előnye, hogy a cella értékét úgy szerkeszthetjük, mintha az egy TextBox kontrolban lenne, annak minden előnyös tulajdonságát kihasználva, például a különböző eseményekhez kezelőt rendelhetünk, amit nem tehetünk meg a DataGrid kontrol mezőivel egyébként.
A TextBox kontrolokban szerkesztve a szöveget – az események kezelhetőségét kihasználva – az megjelenik a másik DataGrid kontrol forrásául szolgáló adathalmazban. De nézzük meg, miként is történik a kontrolok hozzáadása. A megvalósítást a PopulateGrid metódusba ágyaztuk:
private void PopulateGrid()
{
Először létrehoztunk egy tömböt a fejlécszövegek tárolására:
  string[] titleList = new string[3];
  titleList[0] = "Termék kódja";
  titleList[1] = "Termék neve";
  titleList[2] = "Termék ára";
Példányosítjuk a deklarált kontrolokat, melyek megjelennek az oszlopokban:
  lCombo = new ComboBox();
  tbText1 = new TextBox();
  tbText2 = new TextBox();
A kontrolok tulajdonságainak beállítása, valamint az eseménykezelők deklarálása után létrehozunk egy DataTable objektumot, melyet majd forrásként adunk a DataGrid objektumnak:
  dtHelp = new DataTable("Products");
Megadjuk az oszlopait a listában található nevekkel:
  for(int i=0; i< 3;i++)
  {  
    string str = titleList[i];
    dc = new DataColumn(str);
    dc.DataType  = System.Type.GetType("System.String");
    dc.DefaultValue = "";
    dtHelp.Columns.Add(dc);      
  }
Összekapcsoljuk a DataGrid-del:
  grid.DataSource  = dtHelp.DefaultView;
Amennyiben még a DataGrid kontrolunk nem tartalmaz, létrehozunk egy DataGridTableStyle objektumot, és a listába tesszük:
  DataGridTableStyle dtStyle = new DataGridTableStyle();
  dtStyle.MappingName = dtHelp.TableName;
  grid.TableStyles.Add(dtStyle);
  ...
Lekérdezzük az oszlopok stílusait, és kiegészítjük néhány szélességre vonatkozó adattal:
  GridColumnStylesCollection  colStyle;
  colStyle = grid.TableStyles[0].GridColumnStyles;
  colStyle[0].Width = 100;
  colStyle[1].Width = 95;
  colStyle[2].Width = 95;
Lekérdezzük a három oszlop objektumát:
  DataGridTextBoxColumn dgtb1 = (DataGridTextBoxColumn)grid.TableStyles[0].GridColumnStyles[0];
  DataGridTextBoxColumn dgtb2 = (DataGridTextBoxColumn)grid.TableStyles[0].GridColumnStyles[1];
  DataGridTextBoxColumn dgtb3 = (DataGridTextBoxColumn)grid.TableStyles[0].GridColumnStyles[2];
Ezeknek pedig TextBox property-jükön keresztül megadjuk a három létrehozott kontrolt:
  dgtb1.TextBox.Controls.Add (lCombo);
  dgtb2.TextBox.Controls.Add (tbText1);
  dgtb3.TextBox.Controls.Add (tbText2);
}

A DataGridColumnStyle osztály leszármazottai cikksorozat

A DataGridBoolColumn osztály - A DataGridColumnStyle osztály leszármazottai 1. rész

A DataGridTextBoxColumn osztály - A DataGridColumnStyle osztály leszármazottai 2. rész