Weblog @ rebex.cz

Weblogy na webu Rebexu
Welcome to Weblog @ rebex.cz Sign in | Help
in Search

Weblog @ Rebex.cz :: Honza Šotola

nepravidelné poznámky .NET vývojáře

How to bind Enum as datasource of DropDownList etc.

Potřeboval jsem naplnit rozbalovací seznam (DropDownList) hodnotami nikoliv z dB číselníku, ale z následujícího výčtového typu:

public enum FileType :int
{
   
StandardFields = 0,
   
AdvancedFields = 1,
   
Visibility = 2,
   
SpaceMonitoring = 3
}

Většina samplů na toto téma, které jsem našel na internetu, vedla k nabindování pouze stringových hodnot výčtového typu, jenže já potřebuju, aby SelectedValue vracela tu integerovou hodnotu a naopak text v listboxu potřebuji zobrazit "lidsky" a ne symbolické názvy hodnot výčtového typu.

Celkem elegantní řešení vidím přes kolekci SortedList (jsem pořád v .NET 1.x):

Array values = Enum.GetValues(typeof(FileType));
SortedList data =
new
SortedList();
foreach(FileType val in
values)
   data.Add((
int)val, FileTypeUtil.DescribeFileType(val));

ddlFileType.DataSource = data;
ddlFileType.DataTextField = "Value";
ddlFileType.DataValueField = "Key";
ddlFileType.DataBind();

Metoda FileTypeUtil.DescribeFileType vrací pro danou hodnotu výčtového typu její "lidský" název.

Published 25. dubna 2006 16:42 by honzas

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

 

Jawad Khan said:

dubna 25, 2006 17:58
 

Michal said:

Moje verze.
Vyhodou je, ze jde sortovat a filtrovat v DataView, jinak je to obdobne.



''' <summary>
''' Vrací DataTable, obsahujicí jméno a hodnotu Enum typu v parametru typEnum
''' </summary>
''' <param name="typEnum">Enum Typ , ktery je preveden do DataTable</param>
''' <returns></returns>
Shared Function EnumToDataTable(ByVal typEnum As Type) As DataTable
Dim ddlTypnames() As String = [Enum].GetNames(typEnum)
Dim arrddlTypVals As Array = [Enum].GetValues(typEnum)

Dim dt As New DataTable
Dim dr1 As DataRow
Dim dr As DataRow

dt.Columns.Add(New DataColumn("values", GetType(Int32)))
dt.Columns.Add(New DataColumn("names", GetType(String)))
Dim strtmp As String
Dim i2 As Integer
For i2 = 0 To ddlTypnames.Length() - 1
dr = dt.NewRow()

dr(0) = CInt(arrddlTypVals(i2))
dr(1) = ddlTypnames(i2)

dt.Rows.Add(dr)
Next i2

Return dt
End Function
dubna 26, 2006 11:55
 

Extending the DropDownList to Support Enums « using … said:

října 10, 2008 13:05

Leave a Comment

(required) 
(optional)
(required) 
Submit
Powered by Community Server (Personal Edition), by Telligent Systems