In this article I will explain how to bind DropDownList in the GridView FooterTemplate or Footer Row in ASP.Net
 
Database
I’ll make use of Customers Table of Microsoft’s Northwind Database which you can easily download and install using the link provided below
 
HTML Markup
The HTML Markup consists of an ASP.Net GridView with controls defined in the FooterTemplate or Footer Row. Below the GridView there’s a Button to explain how we can access the controls and their values on Button Click event handler.
<asp:GridView ID="GridView1" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"
    RowStyle-BackColor="#A1DCF2" AlternatingRowStyle-BackColor="White" AlternatingRowStyle-ForeColor="#000"
    runat="server" AutoGenerateColumns="false" ShowFooter = "true" OnDataBound = "OnDataBound">
    <Columns>
        <asp:TemplateField HeaderText = "Name">
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' />
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="txtName" runat="server" />
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText = "Country">
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Eval("Country") %>' />
            </ItemTemplate>
            <FooterTemplate>
                <asp:DropDownList ID="ddlCountries" runat="server">
                </asp:DropDownList>
            </FooterTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:Button ID = "btnAdd" runat = "server" Text = "Add" OnClick = "Add" />
 
 
Namespaces
You will need to import the following namespaces.
C#
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
 
VB.Net
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
 
 
 
Binding the GridView
I have made use of DataTable with some dummy values for this article.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id"), new DataColumn("Name"), new DataColumn("Country") });
        dt.Rows.Add(1, "John Hammond", "United States");
        dt.Rows.Add(2, "Mudassar Khan", "India");
        dt.Rows.Add(3, "Suzanne Mathews", "France");
        dt.Rows.Add(4, "Robert Schidner", "Russia");
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
}
 
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Dim dt As New DataTable()
        dt.Columns.AddRange(New DataColumn(2) {New DataColumn("Id"), New DataColumn("Name"), New DataColumn("Country")})
        dt.Rows.Add(1, "John Hammond", "United States")
        dt.Rows.Add(2, "Mudassar Khan", "India")
        dt.Rows.Add(3, "Suzanne Mathews", "France")
        dt.Rows.Add(4, "Robert Schidner", "Russia")
        GridView1.DataSource = dt
        GridView1.DataBind()
    End If
End Sub
 
 
Accessing and binding the DropDownList Control in the FooterTemplate (Footer Row)
I am making use of the GridView OnDataBound event to access and bind the DropDownList control inside the GridView FooterTemplate. The DropDownList is populated with Countries from the Customers Table of the Northwind Database.
C#
protected void OnDataBound(object sender, EventArgs e)
{
    DropDownList ddlCountries = GridView1.FooterRow.FindControl("ddlCountries") as DropDownList;
    ddlCountries.DataSource = GetData("SELECT DISTINCT Country FROM Customers");
    ddlCountries.DataTextField = "Country";
    ddlCountries.DataValueField = "Country";
    ddlCountries.DataBind();
    ddlCountries.Items.Insert(0, new ListItem("Select Country", "0"));
}
 
private DataTable GetData(string query)
{
    string strConnString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(strConnString))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = query;
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                using (DataSet ds = new DataSet())
                {
                    DataTable dt = new DataTable();
                    sda.Fill(dt);
                    return dt;
                }
            }
        }
    }
}
 
VB.Net
Protected Sub OnDataBound(sender As Object, e As EventArgs)
    Dim ddlCountries As DropDownList = TryCast(GridView1.FooterRow.FindControl("ddlCountries"), DropDownList)
    ddlCountries.DataSource = GetData("SELECT DISTINCT Country FROM Customers")
    ddlCountries.DataTextField = "Country"
    ddlCountries.DataValueField = "Country"
    ddlCountries.DataBind()
    ddlCountries.Items.Insert(0, New ListItem("Select Country", "0"))
End Sub
 
Private Function GetData(query As String) As DataTable
    Dim strConnString As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(strConnString)
        Using cmd As New SqlCommand()
            cmd.CommandText = query
            Using sda As New SqlDataAdapter()
                cmd.Connection = con
                sda.SelectCommand = cmd
                Using ds As New DataSet()
                    Dim dt As New DataTable()
                    sda.Fill(dt)
                    Return dt
                End Using
            End Using
        End Using
    End Using
End Function
 
Bind DropDownList in GridView FooterTemplate (Footer Row) in ASP.Net
 
 
Accessing the Values of Controls in FooterTemplate on Button Click
On the click event handler of the Add button I am accessing values of the controls of the FooterTemplate or Footer Row.
C#
protected void Add(object sender, EventArgs e)
{
    string name = (GridView1.FooterRow.FindControl("txtName") as TextBox).Text;
    string country = (GridView1.FooterRow.FindControl("ddlCountries") as DropDownList).SelectedItem.Value;
}
 
VB.Net
Protected Sub Add(sender As Object, e As EventArgs)
    Dim name As String = TryCast(GridView1.FooterRow.FindControl("txtName"), TextBox).Text
    Dim country As String = TryCast(GridView1.FooterRow.FindControl("ddlCountries"), DropDownList).SelectedItem.Value
End Sub
 
The below screenshot displays the values of the TextBox and the DropDownList at runtime in the button click event handler.
Find and Access Control in GridView FooterTemplate (Footer Row)

 
 
Demo
 
Downloads