Jak již bylo ukázáno v prvním článku, nastavením vlastnosti Anchor lze zajistit, aby tlačítka i jiné objekty byly při změně velikosti okna vždy správně umístěny.
Nejprve se podíváme na vlastnost AutoSizeColumnsMode, ve formuláři fOrder ji nastavíme na hodnotu Fill.
V závislosti na počtu sloupců, které jste podle předchozího článku vložili do datového zdroje bsOrder a vybrali ke zobrazení bude výsledek vypadat např. takto.
Vidíme, že .NET upravil poměrně šířku sloupců tak, aby byly všechny zobrazeny ve formuláři a zároveň formulář neobsahoval prázdné místo. Ve výsledném okně můžete měnit šířku libovolného sloupce a .NET vždy upraví zobrazení tak, aby byl vyplněn celý formulář a zobrazeny všechny sloupce.
Pokud hodnotu vlastnosti AutoSizeColumnsMode nastavíme na DisplayedCellsExceptHeader, .NET automaticky nastaví šířku sloupců tak, aby zobrazené hodnoty nebyly oříznuty. Šířku sloupců nelze měnit, při změně velikosti okna je prohlížeč oříznut nebo je v závislosti na parametru Anchor vedle něj prázdné místo.
Nyní se podíváme na vlastnost AutoSizeRowsMode. Tato vlastnost umožňuje automatickou změnu výšky každého jednotlivého řádku podle jeho obsahu. Zde si ukážeme jeho použití při zalamování řádků znakových polí obsahujících texty.
Nejprve v DataGridView Tasks přidáme volbou Edit Columns do formuláře fCustomer sloupec Comments (pokud jste jej dříve nevložili do datasource bsCust, musíte to udělat nyní).
Vybereme pole Comments a v sekci Appearance zadáme DefaultCellStyle: DataGridViewCellStyle {}.
Drobným tlačítkem vpravo od DataGridViewCellStyle {} zobrazíme CellStyle Builder a nastavíme WrapMode na True. Zde také můžeme nastavit barvu pozadí a písma normální buňky a buňky ve vybraném řádku.
Výsledný vzhled formuláře bude vypadat asi takto:
Nyní si ukážeme, jak můžeme přidat do formuláře vypočítané pole. V DataGridView
Tasks nyní zvolíme Add Columns. Přidáme pole, který vznikne spojením hodnot
sloupců City a Country. Vybereme Unbound Column a
údaje vyplníme takto:
Výsledkem sice bude formulář se sloupcem City + Country, zatím však prázdným. Nejprve ale musíme napsat krátkou metodu, která hodnoty v buňkách vypočítá.
Ve vlastnostech dgvCustomer nejprve vybereme vlastnost
(Property) VirtualMode a nastavíme ji na True. Pouze s tímto nastavením
dataGridView umožňuje počítat hodnoty buněk.
Poté zobrazíme záložku Events, vybereme událost (event) CellValueNeeded
a vložíme název metody, kterou vypočteme hodnotu
sloupce, dataGridView1_CellValueNeeded.
V ABL editoru napíšeme kód metody. Zatím jen testovací prototyp, abychom, abychom ověřili funkčnost.
METHOD PRIVATE VOID dataGridView1_CellValueNeeded( INPUT sender AS System.Object,INPUT e AS System.Windows.Forms.DataGridViewCellValueEventArgs ): e:Value = "OK". RETURN. END METHOD. |
Výsledkem bude okno s vypočtenou hodnotou sloupce City + Country OK.
Sloupec City je v pořadí třetí a sloupec Country čtvrtý. V .NET se počítá od nuly, proto se na sloupce můžeme odkazovat číslem dvě, resp. tři. Metoda pro výpočet bude vypadat např. takto:
METHOD PRIVATE VOID dataGridView1_CellValueNeeded( INPUT sender AS System.Object, INPUT e AS System.Windows.Forms.DataGridViewCellValueEventArgs ): e:Value = dataGridView1:Rows[e:RowIndex]:Cells[2]:Value:ToString() + ", " + dataGridView1:Rows[e:RowIndex]:Cells[3]:Value:ToString(). RETURN. END METHOD. |
To nemusí být zrovna nejpohodlnější a změna pořadí sloupců by si vyžádala změnu programu. Proto je lépe se na buňky odkazovat přímo názvy proměnných, které se v nich zobrazují. Tato názvy najdeme na začátku zdrojového kódu třídy fCustomer.
DEFINE PRIVATE VARIABLE cityDataGridViewTextBoxColumn AS System.Windows.Forms.DataGridViewTextBoxColumn NO-UNDO. ... DEFINE PRIVATE VARIABLE countryDataGridViewTextBoxColumn AS System.Windows.Forms.DataGridViewTextBoxColumn NO-UNDO. |
Hodnoty 2 a 3 jednoduše nahradíme názvy těchto proměnných.
METHOD PRIVATE VOID dataGridView1_CellValueNeeded( INPUT sender AS System.Object, INPUT e AS System.Windows.Forms.DataGridViewCellValueEventArgs ): e:Value = dataGridView1:Rows[e:RowIndex]:Cells[cityDataGridViewTextBoxColumn]:Value:ToString() + ", " + dataGridView1:Rows[e:RowIndex]:Cells[countryDataGridViewTextBoxColumn]:Value:ToString(). RETURN. |
Výsledek bude v obou případech odpovídat našemu očekávání.
Protože v našem prohlížeči se zobrazují nadbytečná data, odstraníme sloupce City a Country. To uděláme opět funkcí Edit Columns, kde vlastnost Visible nastavíme na False.
A nyní již vše vypadá tak, jak má.
A to by bylo pro dnešek vše a děkujeme čtenářům za pozornost.
Autoři: Michal Džmuráň volně dle Piotr Tucholski, Wiesław Kurzątkowski (Novum)