Skip to main content

C#: How to bind an Enum to a ListBox/DropDownList/ Checkboxlist control in ASP.NET?

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

Popular posts from this blog

C#: Merging Excel cells with NPOI HSSFWorkbook

In this post we’ll see how to merge the two or more cell with each other while creating the excel sheet using NPOI . Mentioned below is code to merge multiple cells, in this example we are merging first cell to fifth cell of first row (you can adjust row or cell range by passing particular parameters in CellRangeAddress). //Created new Workbook var hwb = new NPOI.HSSF.UserModel. HSSFWorkbook (); //Create worksheet with name. var sheet = hwb.CreateSheet( "new sheet" ); //Create row and cell. var row = sheet.CreateRow(0); var cell = row.CreateCell(0); ; //Set text inside cell cell.SetCellValue( "This is Merged cell" ); cell.CellStyle.WrapText = true ; //define cell range address // parameters: -> first row to last and first cell to last cell var cra = new NPOI.SS.Util. CellRangeAddress (0, 0, 0, 4); //Add merged region to sheet. sheet.AddMergedRegion(cra); Hope this solution helps you J

Difference between Web API, WCF and Web Service

So now we have got the basic idea about Web API , now let’s do some comparison of Web API with WCF and web services. Web Service WCF Web API Web services are created as files with .asmx extension. WCF create with .svc extension Web API are simple class file with .cs(for C#) extension. Web API is inherited from “ApiController” and the class name must end with “Controller”. It is SOAP based service and returns data in XML form. It is also based on SOAP and returns data in XML form. Web API is HTTP based service and by default, it returns data in JSON or XML form. It supports only HTTP protocol. It supports various protocols like TCP, HTTP, HTTPS, Named Pipes, and MSMQ. It supports HTTP protocol. It can be hosted only on IIS. It can be hosted within the application or on IIS or using window service. It can be hosted within the application or on IIS. It is no...