Using the database from here Cascading DropDownList for country/State/City in ASP.Net. I have created a sample
<asp:DataList ID="DataList1" runat="server" OnItemDataBound="OnItemDataBound">
<ItemTemplate>
<table>
<tr>
<td>
Country:
</td>
<td>
</td>
<td>
<asp:DropDownList ID="ddlCountries" runat="server" AutoPostBack="true" OnSelectedIndexChanged="Country_Changed">
</asp:DropDownList>
</td>
<td>
State:
</td>
<td>
</td>
<td>
<asp:DropDownList ID="ddlStates" runat="server" AutoPostBack="true" OnSelectedIndexChanged="State_Changed">
</asp:DropDownList>
</td>
<td>
City:
</td>
<td>
</td>
<td>
<asp:DropDownList ID="ddlCities" runat="server">
</asp:DropDownList>
</td>
</tr>
</table>
</ItemTemplate>
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
</asp:DataList>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Name"), new DataColumn("Country"), new DataColumn("State"), new DataColumn("City") });
dt.Rows.Add("John Mark");
dt.Rows.Add("Ramesh Tandon");
dt.Rows.Add("Mudassar Khan");
dt.Rows.Add("James Anderson");
DataList1.DataSource = dt;
DataList1.DataBind();
}
}
protected void OnItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DropDownList ddlCountries = e.Item.FindControl("ddlCountries") as DropDownList;
DropDownList ddlStates = e.Item.FindControl("ddlStates") as DropDownList;
DropDownList ddlCities = e.Item.FindControl("ddlCities") as DropDownList;
string query = "select CountryId, CountryName from Countries";
BindDropDownList(ddlCountries, query, "CountryName", "CountryId", "Select Country");
ddlStates.Enabled = false;
ddlCities.Enabled = false;
ddlStates.Items.Insert(0, new ListItem("Select State", "0"));
ddlCities.Items.Insert(0, new ListItem("Select City", "0"));
}
}
private void BindDropDownList(DropDownList ddl, string query, string text, string value, string defaultText)
{
string conString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
SqlCommand cmd = new SqlCommand(query);
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
con.Open();
ddl.DataSource = cmd.ExecuteReader();
ddl.DataTextField = text;
ddl.DataValueField = value;
ddl.DataBind();
con.Close();
}
}
ddl.Items.Insert(0, new ListItem(defaultText, "0"));
}
protected void Country_Changed(object sender, EventArgs e)
{
DropDownList ddlCountries = (sender as DropDownList);
DataListItem item = (ddlCountries.NamingContainer as DataListItem);
DropDownList ddlStates = item.FindControl("ddlStates") as DropDownList;
DropDownList ddlCities = item.FindControl("ddlCities") as DropDownList;
ddlStates.Enabled = false;
ddlCities.Enabled = false;
ddlStates.Items.Clear();
ddlCities.Items.Clear();
ddlStates.Items.Insert(0, new ListItem("Select State", "0"));
ddlCities.Items.Insert(0, new ListItem("Select City", "0"));
int countryId = int.Parse(ddlCountries.SelectedItem.Value);
if (countryId > 0)
{
string query = string.Format("select StateId, StateName from States where CountryId = {0}", countryId);
BindDropDownList(ddlStates, query, "StateName", "StateId", "Select State");
ddlStates.Enabled = true;
}
}
protected void State_Changed(object sender, EventArgs e)
{
DropDownList ddlStates = (sender as DropDownList);
DataListItem item = (ddlStates.NamingContainer as DataListItem);
DropDownList ddlCities = item.FindControl("ddlCities") as DropDownList;
ddlCities.Enabled = false;
ddlCities.Items.Clear();
ddlCities.Items.Insert(0, new ListItem("Select City", "0"));
int stateId = int.Parse(ddlStates.SelectedItem.Value);
if (stateId > 0)
{
string query = string.Format("select CityId, CityName from Cities where StateId = {0}", stateId);
BindDropDownList(ddlCities, query, "CityName", "CityId", "Select City");
ddlCities.Enabled = true;
}
}