Tuesday, 2 April 2013

How to populate DropDownList in GridView in ASP.Net

How to populate DropDownList in GridView in ASP.Net
 
Namespaces
You will need to import the following namespaces.
C#
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
 
VB.Net
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
 
 
HTML Markup
The HTML Markup contains an ASP.Net GridView with DropDownList in ItemTemplate of TemplateField.
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound">
    <Columns>
        <asp:BoundField HeaderText="Name" DataField="ContactName" />
        <asp:TemplateField HeaderText = "Country">
            <ItemTemplate>
                <asp:Label ID="lblCountry" runat="server" Text='<%# Eval("Country") %>' Visible = "false" />
                <asp:DropDownList ID="ddlCountries" runat="server">
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
 
 
Binding the GridView
The below code binds the ASP.Net GridView with records from the Customers table of the Northwind database
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        GridView1.DataSource = GetData("SELECT ContactName, Country FROM Customers");
        GridView1.DataBind();
    }
}
 
private DataSet GetData(string query)
{
    string conString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    SqlCommand cmd = new SqlCommand(query);
    using (SqlConnection con = new SqlConnection(conString))
    {
        using (SqlDataAdapter sda = new SqlDataAdapter())
        {
            cmd.Connection = con;
            sda.SelectCommand = cmd;
            using (DataSet ds = new DataSet())
            {
                sda.Fill(ds);
                return ds;
            }
        }
    }
}
 
VB.Net
Protected Sub Page_Load(ByVal sender As ObjectByVal e As EventArgsHandles Me.Load
    If Not IsPostBack Then
        GridView1.DataSource = GetData("SELECT ContactName, Country FROM Customers")
        GridView1.DataBind()
    End If
End Sub
 
Private Function GetData(query As StringAs DataSet
    Dim conString As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Dim cmd As New SqlCommand(query)
    Using con As New SqlConnection(conString)
        Using sda As New SqlDataAdapter()
            cmd.Connection = con
            sda.SelectCommand = cmd
            Using ds As New DataSet()
                sda.Fill(ds)
                Return ds
            End Using
        End Using
    End Using
End Function
 
 
Binding the ASP.Net DropDownList in ItemTemplate
The RowDataBound event of the ASP.Net GridView is used to bind the ASP.Net DropDownList with the Countries form the Northwind database, once the DropDownList is populated, the Country to which the Customer belongs is set as the Selected in the DropDownList.
C#
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //Find the DropDownList in the Row
        DropDownList ddlCountries = (e.Row.FindControl("ddlCountries"as DropDownList);
        ddlCountries.DataSource = GetData("SELECT DISTINCT Country FROM Customers");
        ddlCountries.DataTextField = "Country";
        ddlCountries.DataValueField = "Country";
        ddlCountries.DataBind();
 
        //Add Default Item in the DropDownList
        ddlCountries.Items.Insert(0, new ListItem("Please select"));
           
        //Select the Country of Customer in DropDownList
        string country = (e.Row.FindControl("lblCountry"as Label).Text;
        ddlCountries.Items.FindByValue(country).Selected = true;
    }
}
 
VB.Net
Protected Sub OnRowDataBound(ByVal sender As ObjectByVal e As GridViewRowEventArgs)
    If (e.Row.RowType = DataControlRowType.DataRow) Then
       
       'Find the DropDownList in the Row
        Dim ddlCountries As DropDownList = CType(e.Row.FindControl("ddlCountries"), DropDownList)
        ddlCountries.DataSource = GetData("SELECT DISTINCT Country FROM Customers")
        ddlCountries.DataTextField = "Country"
        ddlCountries.DataValueField = "Country"
        ddlCountries.DataBind()
 
        'Add Default Item in the DropDownList
        ddlCountries.Items.Insert(0, New ListItem("Please select"))
       
        'Select the Country of Customer in DropDownList
        Dim country As String = CType(e.Row.FindControl("lblCountry"), Label).Text
        ddlCountries.Items.FindByValue(country).Selected = True
    End If
End Sub
 
 
Screenshot
 
Demo
 
Downloads
 

No comments:

Post a Comment