MulitColumnComboBox

Poměrně dlouhou dobu jsem přispěvatelem do konference na Builder.cz a snažím se odpovídat na zdejší dotazy. I já jsem si prošel obdobím, kdy jsem tápal a nevěděl si rady. Ale o tom jsem již psal a nemá příliš cenu se k tomu vracet.

Dotazy ať již jsou jakékoli, občas jsou inspirativní a jeden z nich, výstižně nadepsaný Datagrid a vice sloupcu v comboboxu upoutal moji pozornost o něco více. A jelikož jeho autor vyjádřil potřebu nějaké té ukázky kódu, zkusil jsem něco málo ukázat.

MultiColumnComboBox

Jedná se o jednoduchou implementaci ComboBoxu, který umožňuje zobrazit v jedné položce text z více sloupců datového zdroje. Myslím, že než popisovat zde technické aspekty bude lepší napsat potřebnou část kódu. Celý MultiColumnComboBox je pak možné si stáhnout.

Hlavní podstatou úpravy ComboBoxu je jeho přepsání metody OnDrawItem, která v mém případě vypadá následovně:

protected override void OnDrawItem(DrawItemEventArgs e)
{
	base.OnDrawItem (e);
	if ((e.Index < 0)="" ||="" (e.index="">= Items.Count))
		return;
	if ((DisplayMember == null) || (DisplayMember.Length <= 0))="" return;="" string="" []="" columns="this.DisplayMember.Split(',');" object="" []="" values="new" object[columns.length];="" string="" displaytext="string.Empty;" brush="" brush="null;" rectanglef="" layout="new" rectanglef(e.bounds.x,="" e.bounds.y,="" e.bounds.width,="" e.bounds.height);="" for="" (int="" i="0;">

Ostatní vlastnosti jsou zde přepsány hlavně z důvodu, abych mohl zajistit vypsání hodnot z více sloupců. Formát výstupu je pak ovlivněn právě vlastností FormatString, která předstvuje známý formát zápisu formátování textu. A dále přepsanou novou vlastnost DisplayMember, která obsahuje seznam sloupců oddělených čárkou, ze kterých budou hodnoty vybrány.

Musím upozornit, že se nejedná o odzkoušený prvek a tento slouží pouze pro demonstrační účely, jak přistoupit k napsání si vlastního prvku. Jeho kód můžete jakkoli modifikovat a používat dále, budu ovšem rád, pokud mi pošlete jeho vylepšenou variantu.

Add a Comment