Megosztás a következőn keresztül:


Cellastílusok a Windows Forms DataGridView vezérlőben

A DataGridView vezérlőelem minden cellának saját stílusa lehet, például szövegformátum, háttérszín, előtérszín és betűtípus. Általában azonban több cella is rendelkezik bizonyos stílusjellemzőkkel.

A stílusokat megosztó cellacsoportok tartalmazhatják az adott sorokban vagy oszlopokban lévő összes cellát, az adott értékeket tartalmazó összes cellát vagy a vezérlőelem összes celláját. Mivel ezek a csoportok átfedésben vannak, az egyes cellák több helyről is megkaphatják a stílusinformációkat. Előfordulhat például, hogy egy DataGridView vezérlőelem minden cellájának ugyanazt a betűtípust kell használnia, de csak a pénznemoszlopokban lévő cellák használják a pénznemformátumot, és csak a negatív számokat tartalmazó pénznemcellák piros előtérszínt használnak.

A DataGridViewCellStyle osztály

A DataGridViewCellStyle osztály a vizualizáció stílusához kapcsolódó alábbi tulajdonságokat tartalmazza:

Ez az osztály a formázáshoz kapcsolódó alábbi tulajdonságokat is tartalmazza:

Ezekről a tulajdonságokról és más cellastílusú tulajdonságokról további információt a DataGridViewCellStyle referenciadokumentációjában és az alábbi Lásd még szakaszban felsorolt témakörökben talál.

DataGridViewCellStyle-objektumok használata

A DataGridViewCellStyle, DataGridView, DataGridViewColumnés DataGridViewRow osztályok, valamint az ezekből származtatott osztályok különböző tulajdonságaiból lekérheti a DataGridViewCell objektumokat. Ha az egyik tulajdonság még nincs beállítva, az értékének beolvasása új DataGridViewCellStyle objektumot hoz létre. Saját DataGridViewCellStyle objektumokat is létrehozhat, és hozzárendelheti őket ezekhez a tulajdonságokhoz.

Elkerülheti a stílusinformációk szükségtelen duplikálását, ha DataGridViewCellStyle objektumokat oszt meg több DataGridView elem között. Mivel a vezérlőelemek, oszlop- és sorszintek stílusai az egyes szinteken a cellaszintig szűrnek, a stílusok duplikálását úgy is elkerülheti, hogy minden szinten csak a fenti szintektől eltérő stílustulajdonságokat állítja be. Ezt az alábbi Stílusöröklés szakasz ismerteti részletesebben.

Az alábbi táblázat azokat az elsődleges tulajdonságokat sorolja fel, amelyek DataGridViewCellStyle objektumokat kapnak vagy állítottak be.

Ingatlan Osztályok Leírás
DefaultCellStyle DataGridView, DataGridViewColumn, DataGridViewRowés származtatott osztályok Lekéri vagy beállítja a teljes vezérlőelem (beleértve a fejléccellák) összes cellájának alapértelmezett stílusát egy oszlopban vagy egy sorban.
RowsDefaultCellStyle DataGridView Lekéri vagy beállítja a vezérlőelem összes sora által használt alapértelmezett cellastílusokat. Ez nem tartalmazza a fejléccellákat.
AlternatingRowsDefaultCellStyle DataGridView Lekéri vagy beállítja a vezérlőelem sorainak váltakozása által használt alapértelmezett cellastílusokat. A főkönyvszerű effektus létrehozásához használatos.
RowHeadersDefaultCellStyle DataGridView Lekéri vagy beállítja a vezérlőelem sorfejlécei által használt alapértelmezett cellastílusokat. Ha engedélyezve vannak a vizuális stílusok, az aktuális téma felülírja az előzőt.
ColumnHeadersDefaultCellStyle DataGridView Lekéri vagy beállítja a vezérlőelem oszlopfejlécei által használt alapértelmezett cellastílusokat. Ha engedélyezve vannak a vizuális stílusok, az aktuális téma felülírja az előzőt.
Style DataGridViewCell és származtatott osztályok Lekéri vagy beállítja a cellaszinten megadott stílusokat. Ezek a stílusok felülbírálják a magasabb szintektől örökölt stílusokat.
InheritedStyle DataGridViewCell, DataGridViewRow, DataGridViewColumnés származtatott osztályok Lekéri a cellára, sorra vagy oszlopra jelenleg alkalmazott összes stílust, beleértve a magasabb szintektől örökölt stílusokat is.

Ahogy fentebb említettük, a stílustulajdonság értékének lekérése automatikusan létrehoz egy új DataGridViewCellStyle objektumot, ha a tulajdonság korábban még nincs beállítva. Az objektumok szükségtelen létrehozásának elkerülése érdekében a sor- és oszloposztályok HasDefaultCellStyle tulajdonságot tartalmaznak, amely alapján megállapíthatja, hogy a DefaultCellStyle tulajdonság be van-e állítva. Hasonlóképpen, a cellaosztályok HasStyle tulajdonsága jelzi, hogy a Style tulajdonság be van-e állítva.

A stílustulajdonságok mindegyike rendelkezik egy megfelelő PropertyNameChanged eseménysel a DataGridView vezérlőelemen. A sor-, oszlop- és cellatulajdonságok esetében az esemény neve "Row", "Column", vagy "Cell" (például RowDefaultCellStyleChanged) kezdődik. Ezek az események akkor fordulnak elő, ha a megfelelő stílustulajdonság egy másik DataGridViewCellStyle objektumra van állítva. Ezek az események nem fordulnak elő, ha DataGridViewCellStyle objektumot kér le egy stílustulajdonságból, és módosítja annak tulajdonságértékeit. A cellastílus objektumok módosításaira adott válasz érdekében kezelje a CellStyleContentChanged eseményt.

Stílusöröklés

Minden DataGridViewCell a InheritedStyle tulajdonságából kapja meg a megjelenését. A tulajdonság által visszaadott DataGridViewCellStyle objektum a DataGridViewCellStyletípusú tulajdonságok hierarchiájából örökli az értékeit. Ezek a tulajdonságok alább szerepelnek abban a sorrendben, amelyben a nem fejléccellák InheritedStyle-ja megkapja az értékeit.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (csak a páratlan indexszámú sorok celláihoz)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

A sor- és oszlopfejléccellák esetében a InheritedStyle tulajdonságot a forrástulajdonságok alábbi listájában szereplő értékek töltik ki az adott sorrendben.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle vagy DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

Az alábbi ábra ezt a folyamatot szemlélteti.

DataGridViewCellStyle

A sorok és oszlopok örökölt stílusait is elérheti. Az oszlop InheritedStyle tulajdonság az alábbi tulajdonságokból örökli az értékeit.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

A sor InheritedStyle tulajdonság az alábbi tulajdonságokból örökli az értékeit.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (csak a páratlan indexszámú sorok celláihoz)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Egy DataGridViewCellStyle tulajdonság által visszaadott InheritedStyle objektum minden tulajdonsága esetében a tulajdonság értéke a megfelelő lista első cellastílusából származik, amelynek a megfelelő tulajdonsága nem az DataGridViewCellStyle osztály alapértelmezett értékére van beállítva.

Az alábbi táblázat bemutatja, hogyan örökli egy példacella ForeColor tulajdonságértékét az azt tartalmazó oszlopból.

DataGridViewCellStyle típusú tulajdonság Példa a visszakeresett objektum ForeColor értékére
DataGridViewCell.Style Color.Empty
DataGridViewRow.DefaultCellStyle Color.Red
DataGridView.AlternatingRowsDefaultCellStyle Color.Empty
DataGridView.RowsDefaultCellStyle Color.Empty
DataGridViewColumn.DefaultCellStyle Color.DarkBlue
DataGridView.DefaultCellStyle Color.Black

Ebben az esetben a cella sorából származó Color.Red érték a lista első valós értéke. Ez lesz a cella ForeColorInheritedStyle tulajdonságának értéke.

Az alábbi ábra bemutatja, hogy a különböző DataGridViewCellStyle tulajdonságok hogyan örökölhetik az értékeiket különböző helyekről.

DataGridView tulajdonság-érték öröklés

A stílusöröklés előnyeinek kihasználásával a teljes vezérlőhöz megfelelő stílusokat adhat meg anélkül, hogy ugyanazokat az információkat több helyen kellene megadnia.

Bár a fejléccellák a leírtak szerint részt vesznek a stílusöröklésben, a ColumnHeadersDefaultCellStyle vezérlőelem RowHeadersDefaultCellStyle és DataGridView tulajdonságai által visszaadott objektumok olyan kezdeti tulajdonságértékekkel rendelkeznek, amelyek felülbírálják a DefaultCellStyle tulajdonság által visszaadott objektum tulajdonságértékeit. Ha azt szeretné, hogy a DefaultCellStyle tulajdonság által visszaadott objektum tulajdonságai a sor- és oszlopfejlécekre vonatkozzanak, a ColumnHeadersDefaultCellStyle által visszaadott objektumok megfelelő tulajdonságait, RowHeadersDefaultCellStyle tulajdonságokat pedig az DataGridViewCellStyle osztályhoz megadott alapértelmezett értékre kell állítania.

Megjegyzés:

Ha a vizualizációs stílusok engedélyezve vannak, a sor- és oszlopfejléceket (a TopLeftHeaderCellkivételével) az aktuális téma automatikusan stílusba rendezi, felülírva a tulajdonságok által megadott stílusokat.

A DataGridViewButtonColumn, DataGridViewImageColumnés DataGridViewCheckBoxColumn típus is inicializálja a DefaultCellStyle oszlop tulajdonság által visszaadott objektum bizonyos értékeit. További információkért tekintse meg az ilyen típusok referenciadokumentációját.

Stílusok dinamikus beállítása

Az adott értékekkel rendelkező cellastílusok testreszabásához implementáljon egy kezelőt a DataGridView.CellFormatting eseményhez. Az esemény kezelői a DataGridViewCellFormattingEventArgs típusú argumentumot kapják. Ez az objektum olyan tulajdonságokat tartalmaz, amelyekkel meghatározhatja a formázandó cella értékét és helyét a DataGridView vezérlőelemben. Ez az objektum egy CellStyle tulajdonságot is tartalmaz, amely a formázott cella InheritedStyle tulajdonságának értékére van inicializálva. Módosíthatja a cellastílus tulajdonságait a cella értékének és helyének megfelelő stílusinformációk megadásához.

Megjegyzés:

A RowPrePaint és a RowPostPaint események is kapnak egy DataGridViewCellStyle objektumot az eseményadatokban, de esetükben ez a sor InheritedStyle tulajdonság másolata csak olvasható célokra, és a rajta végzett módosítások nem befolyásolják a vezérlést.

Az egyes cellák stílusát dinamikusan is módosíthatja az olyan eseményekre reagálva, mint a DataGridView.CellMouseEnter és CellMouseLeave események. Az CellMouseEnter esemény kezelőjében például tárolhatja a cella háttérszínének aktuális értékét (a cella Style tulajdonságán keresztül), majd beállíthatja egy új színre, amely kiemeli a cellát, amikor az egér rámutat rá. A CellMouseLeave esemény kezelőjében visszaállíthatja a háttérszínt az eredeti értékre.

Megjegyzés:

A cella Style tulajdonságában tárolt értékek gyorsítótárazása fontos, függetlenül attól, hogy egy adott stílusérték beállítva van-e. Ha ideiglenesen lecserél egy stílusbeállítást, annak eredeti "nincs beállítva" állapotára történő visszaállítása biztosítja, hogy a cella visszalépjen a stílusbeállítás magasabb szintű örökléséhez. Ha meg kell határoznia a cella tényleges stílusát, függetlenül attól, hogy a stílus öröklődik-e, használja a cella InheritedStyle tulajdonságát.

Lásd még