использовать 3 DropDownLists один для каждого объекта, отображение показано ниже
ddlContinents - Список континентов
ddlCountry- Список стран
ddlCity - Список городов
<span style ="font-family:Arial">Select Continent : </span>
<asp:DropDownList ID="ddlContinents" runat="server" AutoPostBack = "true"
OnSelectedIndexChanged="ddlContinents_SelectedIndexChanged">
<asp:ListItem Text = "--Select Continent--" Value = ""></asp:ListItem>
</asp:DropDownList>
<br /><br />
<span style ="font-family:Arial">Select Country : </span>
<asp:DropDownList ID="ddlCountry" runat="server" AutoPostBack = "true"
Enabled = "false" OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged">
<asp:ListItem Text = "--Select Country--" Value = ""></asp:ListItem>
</asp:DropDownList>
<br /><br />
<span style ="font-family:Arial">Select City : </span>
<asp:DropDownList ID="ddlCity" runat="server" AutoPostBack = "true"
Enabled = "false" OnSelectedIndexChanged="ddlCity_SelectedIndexChanged">
<asp:ListItem Text = "--Select City--" Value = ""></asp:ListItem>
</asp:DropDownList>
<br /><br />
<asp:Label ID="lblResults" runat="server" Text="" Font-Names = "Arial" />
добавлено событие OnSelectedIndexChanged для всех DropDownLists, а также для свойства AutoPostBack установлено значение true.
В событии Page_Load страницы я заполняю список континентов DropDownList
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddlContinents.AppendDataBoundItems = true;
String strConnString = ConfigurationManager
.ConnectionStrings["conString"].ConnectionString;
String strQuery = "select ID, ContinentName from Continents";
SqlConnection con = new SqlConnection(strConnString);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = strQuery;
cmd.Connection = con;
try
{
con.Open();
ddlContinents.DataSource = cmd.ExecuteReader();
ddlContinents.DataTextField = "ContinentName";
ddlContinents.DataValueField = "ID";
ddlContinents.DataBind();
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}
}
}
Далее в событии SelectedIndexChanged родительского континента DropDownList Я заполняю список стран DropDownList на основе идентификатора континента, выбранного пользователем
protected void ddlContinents_SelectedIndexChanged(object sender, EventArgs e)
{
ddlCountry.Items.Clear();
ddlCountry.Items.Add(new ListItem("--Select Country--", ""));
ddlCity.Items.Clear();
ddlCity.Items.Add(new ListItem("--Select City--", ""));
ddlCountry.AppendDataBoundItems = true;
String strConnString = ConfigurationManager
.ConnectionStrings["conString"].ConnectionString;
String strQuery = "select ID, CountryName from Countries " +
"where ContinentID=@ContinentID";
SqlConnection con = new SqlConnection(strConnString);
SqlCommand cmd = new SqlCommand();
cmd.Parameters.AddWithValue("@ContinentID",
ddlContinents.SelectedItem.Value);
cmd.CommandType = CommandType.Text;
cmd.CommandText = strQuery;
cmd.Connection = con;
try
{
con.Open();
ddlCountry.DataSource = cmd.ExecuteReader();
ddlCountry.DataTextField = "CountryName";
ddlCountry.DataValueField = "ID";
ddlCountry.DataBind();
if (ddlCountry.Items.Count > 1)
{
ddlCountry.Enabled = true;
}
else
{
ddlCountry.Enabled = false;
ddlCity.Enabled = false;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}
}
Вы заметите, что я передаю идентификатор континента в качестве параметра в запрос с использованием свойства SelectedItemValue DropDownList, таким образом, запрос возвращает записи (Страны) для этого идентификатора континента, которые затем привязываются к стране DropDownList
Заполнение города DropDownList
Теперь по выбору страны, я заполняю города для этой страны в списке DropDownList City.
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
ddlCity.Items.Clear();
ddlCity.Items.Add(new ListItem("--Select City--", ""));
ddlCity.AppendDataBoundItems = true;
String strConnString = ConfigurationManager
.ConnectionStrings["conString"].ConnectionString;
String strQuery = "select ID, CityName from Cities " +
"where CountryID=@CountryID";
SqlConnection con = new SqlConnection(strConnString);
SqlCommand cmd = new SqlCommand();
cmd.Parameters.AddWithValue("@CountryID",
ddlCountry.SelectedItem.Value);
cmd.CommandType = CommandType.Text;
cmd.CommandText = strQuery;
cmd.Connection = con;
try
{
con.Open();
ddlCity.DataSource = cmd.ExecuteReader();
ddlCity.DataTextField = "CityName";
ddlCity.DataValueField = "ID";
ddlCity.DataBind();
if (ddlCity.Items.Count > 1)
{
ddlCity.Enabled = true;
}
else
{
ddlCity.Enabled = false;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}
* *} Тысяча сорок-девять
Выше я запускаю запрос в Таблице городов и получаю все города, принадлежащие той стране, которая была выбрана пользователем.
Отображение результатов
Наконец, в событии SelectedIndexChanged для City DropDownList я отображаю полные выборы, сделанные пользователем.
protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e)
{
lblResults.Text = "You Selected " +
ddlContinents.SelectedItem.Text + " -----> " +
ddlCountry.SelectedItem.Text + " -----> " +
ddlCity.SelectedItem.Text;
}