There have
been requirements where we need to bind ListControl from enum (with enum Description
as Text and enum value as Value).
For
example I have an enum of Countries as follows:
public enum
TestCountries
{
[Description("India")] India = 1
,
[Description("United State Of America")]
UnitedStateOfAmerica = 2
,
[Description("United Kingdom")] UnitedKingdom = 3
}
|
And I
want to bind this enum’s description and value to any list control.
Here I
am writing a static method “LoadListForListControls<T>”, which will take
Enum as T, and then return list of ListItem.
// We need to use
following namespaces for this method:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Web.UI.WebControls;
public static
List<ListItem>
LoadListForListControls<T>()
{
var type
= typeof(T);
var list
= new List<ListItem>();
foreach (var value in Enum.GetValues(type))
{
var
enumValue = (Int32)value;
var
fi = value.GetType().GetField(value.ToString());
var
customAttributes =
fi.GetCustomAttributes(typeof(DescriptionAttribute),
false);
DescriptionAttribute
attribute = null;
if
(customAttributes.Length > 0)
attribute = (DescriptionAttribute)customAttributes[0];
var
item = new ListItem
{
Text = attribute != null
?
attribute.Description
: Enum.GetName(type, enumValue),
Value = (Convert.ToInt32(enumValue)).ToString()
};
list.Add(item);
}
return
list;
}
|
Usage:
So our
method is ready, To use it let’s
take a dropdown list:
<asp:DropDownList runat="server" ID="ddlCountries" />
|
Now in
code behind C# let’s create a method which takes two parameters first as ListControl,
and second list of ListItems and this method will then bind the provided list
control.(Note: I have made this generic function to work with all list
controls, you can modify as per your convenience).
private static
void BindListControl(ListControl
ctrl, List<ListItem>
list)
{
ctrl.DataSource = list;
ctrl.DataTextField = "Text";
ctrl.DataValueField = "Value";
ctrl.DataBind();
}
|
Just
pass the name of the list control(in this case "ddlCountries") as first parameter and in second parameter call
"LoadListForListControls” method to get list as:
BindListControl(ddlCountries, LoadListForListControls<TestCountries>());
|
Same way
you can bind Listbox/Checkboxlist/Radiobuttonlist by same BindListControl”
method.
Hope it
helps!!!
Comments
Post a Comment