Formátování řádků GridView v závislosti na obsahu
- 20. Březen 2010
- Publikováno v ASP.NET
- Napište komentář
Komponenta GridView nabízí ideální způsob, jak rychle a bez práce prezentovat množinu dat. Možnosti formátování jsou opravdu široké, avšak vztahují se na celou komponentu, či její části. Pokud chceme upravit vzhled jednotlivých řádků ( a to v závislosti na jejich obsahu ), musíme sáhnout po události RowDataBound. Ta je vyvolána při zpracování každého záznamu v datovém zdroji.
V příkladu bude záznamy zobrazované v GridView reprezentovat třída Zaznam
{
public string text {get; set; }
public int cislo { get; set; }
public bool bit { get; set; }
public Zaznam(string text, int cislo, bool bit)
{
this.text = text;
this.cislo = cislo;
this.bit = bit;
}
}
Vytvořím nový GridView, nastavím mu datový zdroj s několika záznamy a postarám se o vykreslení do stránky
data.Add(new Zaznam("První", 4, true));
data.Add(new Zaznam("Druhý", 3, true));
data.Add(new Zaznam("Třetí", 8, false));
data.Add(new Zaznam("Čtvrtý", 2, false));
data.Add(new Zaznam("Pátý", 5, true));
GridView gv = new GridView();
gv.DataSource = data;
gv.DataBind();
form1.Controls.Add(gv);
Pokud bych teď chtěl změnou pozadí řádku zvýraznit všechny takové, které mají nastaveno číslo větší než 3, využiji události RowDataBound. Při jejím vyvolání se provede metoda GridView_RowDataBound a ta se postará o zvýraznění řádku, jehož zpracování událost vyvolalo.
gv.RowDataBound += GridView_RowDataBound;
gv.DataBind();
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (((Zaznam)e.Row.DataItem).cislo> 3)
{
e.Row.BackColor = System.Drawing.Color.YellowGreen;
}
}
}
Vzhledem k tomu, že chceme zvýrazňovat pouze řádky s daty (ne třeba stránkování, hlavičku, prázdné řádky, ..), je třeba ověřit typ řádku, který vyvolal událost.
Nejsnadnější způsob, jak přistupovat k datům v řádku je přetypování objektu DataItem na objekt, který reprezentuje záznam v GridView. V tomto případě tedy Zaznam. Tím dostaneme přístup ke všem vlastnostem daného objektu a stačí vytvořit vhodnou podmínku. Nakonec stačí nastavit způsob zvýraznění.
Druhá možnost, jak přistoupit k datům, vede přes jednotlivé buňky řádku. Ty jsou počítány od nuly a stejného výsledku by tak šlo dosáhnout podmínkou:
Určitě jste si všimli, že ve sloupci bit, je pro reprezentaci hodnot true / false použit klasický CheckBox. Není problém řádky, kdy není CheckBox zaškrtnutý, vypsat tučně. Stačí metodu GridView_RowDataBound doplnit o další podmínku, kde objekt v dané buňce přetypujeme na CheckBox a zjistíme stav vlastnosti Checked.
Takto lze přistupovat k nejrůznějším datům v GridView a na jejich základě upravovat vzhled daného řádku. Případně provádět jakékoliv úkony závislé na vypsaných datech.


Dosud žádný komentář.