In this article I will explain with an example, how to populate (bind) DropDownList in ItemTemplate of Repeater Control in ASP.Net using C# and VB.Net.
The DropDownList will be populated from database inside the OnItemDataBound event of the Repeater control in ASP.Net using C# and VB.Net.
 
 
Database
Here I am making use of Microsoft’s Northwind Database. The download and install instructions are provided in the following article.
 
 
HTML Markup
The following HTML Markup consists of an ASP.Net Repeater control with an HTML Table Layout.
Note: For more information on displaying HTML Table Layout using Repeater control, please refer Repeater control Tutorial with example in ASP.Net using C# and VB.Net.
 
The Repeater’s ItemTemplate consists of two Label controls and a DropDownList control.
<asp:Repeater ID="rptCustomers" runat="server" OnItemDataBound="OnItemDataBound">
    <HeaderTemplate>
        <table cellspacing="0" rules="all" border="1">
            <tr>
                <th scope="col" style="width: 80px">
                    Customer Id
                </th>
                <th scope="col" style="width: 120px">
                    Name
                </th>
                <th scope="col" style="width: 100px">
                    Country
                </th>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <asp:Label ID="lblCustomerId" runat="server" Text='<%# Eval("CustomerId") %>' />
            </td>
            <td>
                <asp:Label ID="lblName" runat="server" Text='<%# Eval("ContactName") %>' />
            </td>
            <td>
                <asp:DropDownList ID="ddlCountries" runat="server">
                </asp:DropDownList>
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>
 
 
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
 
 
Populating Repeater control from database in ASP.Net
Inside the Page load event handler, the Repeater is populated with the records from the Customers table.
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        rptCustomers.DataSource = this.GetData("SELECT TOP 10 CustomerId, ContactName, Country FROM Customers");
        rptCustomers.DataBind();
    }
}
 
private DataTable GetData(string query)
{
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                DataTable dt = new DataTable();
                sda.Fill(dt);
                return dt;
            }
        }
    }
}
 
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        rptCustomers.DataSource = Me.GetData("SELECT TOP 10 CustomerId, ContactName, Country FROM Customers")
        rptCustomers.DataBind()
    End If
End Sub
 
Private Function GetData(ByVal query As String) As DataTable
    Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As SqlConnection = New SqlConnection(constr)
        Using cmd As SqlCommand = New SqlCommand(query, con)
            Using sda As SqlDataAdapter = New SqlDataAdapter(cmd)
                Dim dt As DataTable = New DataTable()
                sda.Fill(dt)
                Return dt
            End Using
        End Using
    End Using
End Function
 
 
Populate (Bind) DropDownList in ItemTemplate of Repeater Control in ASP.Net
Inside the OnItemDataBound event handler, first the DropDownList is referenced using the FindControl method and then it is populated with records of Countries from database.
The Country value of the respective Customer is fetched from the DataItem object of the Repeater and is used to select the Country inside the DropDownList control.
C#
protected void OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        //Find the DropDownList in the Repeater Item.
        DropDownList ddlCountries = (e.Item.FindControl("ddlCountries") as DropDownList);
        ddlCountries.DataSource = this.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.Item.DataItem as DataRowView)["Country"].ToString();
        ddlCountries.Items.FindByValue(country).Selected = true;
    }
}
 
VB.Net
Protected Sub OnItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
    If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
        'Find the DropDownList in the Repeater Item.
        Dim ddlCountries As DropDownList = (TryCast(e.Item.FindControl("ddlCountries"), DropDownList))
        ddlCountries.DataSource = Me.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 = (TryCast(e.Item.DataItem, DataRowView))("Country").ToString()
        ddlCountries.Items.FindByValue(country).Selected = True
    End If
End Sub
 
 
Screenshot
Populate (Bind) DropDownList in ItemTemplate of Repeater Control in ASP.Net
 
 
Demo
 
 
Downloads