V předchozích čáncích jsme si ukázali vývoj jednoduché GUI aplikace nad databází  sports2000 s uživatelským rozhraním .NET. V tomto článku si ukážeme, jak nastavením některých vlastností ( Properties ) objektu typu  DataGridView můžeme měnit vzhled a chování aplikace. Takových vlastností je mnoho a kompletní ukázka jejich využití přesahuje rozsah tohoto článku. Máte zde tedy široké pole pro vlastní výzkum a inovace.

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.

Image

Nejprve se podíváme na vlastnost AutoSizeColumnsMode, ve formuláři fOrder ji nastavíme na hodnotu Fill.

Image

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.

Image

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.

Image

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í). 

DataGrid.jpg

Vybereme pole Comments a v sekci Appearance zadáme DefaultCellStyle: DataGridViewCellStyle {}.

EditColumnsII.jpg

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.

CellStyleBuilder.jpg

Výsledný vzhled formuláře bude vypadat asi takto:

Image

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ů CityCountry. Vybereme Unbound Column a údaje vyplníme takto:

CityCountry.jpg

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á.

Image

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.

CellValueNeeded.jpg

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.

OKCalculated.jpg

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. 
END METHOD.

Výsledek bude v obou případech odpovídat našemu očekávání.

Image

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.

VisibleFalse.jpg

A nyní již vše vypadá tak, jak má.

Image

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)


Nahoru