Это проект ASP.NET? Если это так, ваш код выглядит правильно для меня.
Возможно, проблема заключается в том, что ваше мероприятие lbCont_SelectedIndexChanged
не стреляет. Вы можете проверить это, установив точку останова в этом методе событий и проверив, чтобы узнать, что произойдет. Если он не срабатывает, вы можете исправить его, установив для свойства AutoPostBack
в элементе управления списком значение True.
Вот небольшой рабочий пример для вас, который выборочно связывает несколько разных источников данных с выпадающим списком, а затем копирует код, который вы используете выше, чтобы вставить «Выбрать страну ...» в качестве первого элемента в раскрывающемся списке список.
Default.aspx код:
<body>
<form id="form1" runat="server">
<div>
<h2>Dropdown List Test</h2>
</div>
<div>
Continent Listbox:
<p>
<asp:ListBox ID="lbCont" runat="server" OnSelectedIndexChanged="lbCont_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Value="1" Selected="True">Continent 1</asp:ListItem>
<asp:ListItem Value="2">Continent 2</asp:ListItem>
<asp:ListItem Value="3">Continent 3</asp:ListItem>
</asp:ListBox>
</p>
Countries Dropdown:
<p>
<asp:DropDownList ID="ddlCount" runat="server"></asp:DropDownList>
</p>
</div>
</form>
</body>
Default.aspx.cs код:
protected void lbCont_SelectedIndexChanged(object sender, EventArgs e)
{
DataTable dt = new DataTable();
switch (lbCont.SelectedIndex)
{
case 0:
dt.TableName = "CountriesTable1";
dt.Columns.Add("CountryID");
dt.Columns.Add("CountryName");
dt.Rows.Add(1, "Country 1a");
dt.Rows.Add(2, "Country 1b");
dt.Rows.Add(3, "Country 1c");
break;
case 1:
dt.TableName = "CountriesTable2";
dt.Columns.Add("CountryID");
dt.Columns.Add("CountryName");
dt.Rows.Add(1, "Country 2a");
dt.Rows.Add(2, "Country 2b");
dt.Rows.Add(3, "Country 2c");
break;
case 2:
dt.TableName = "CountriesTable3";
dt.Columns.Add("CountryID");
dt.Columns.Add("CountryName");
dt.Rows.Add(1, "Country 3a");
dt.Rows.Add(2, "Country 3b");
dt.Rows.Add(3, "Country 3c");
break;
default:
break;
}
ddlCount.DataSource = dt;
ddlCount.DataTextField = "CountryName";
ddlCount.DataValueField = "CountryID";
ddlCount.DataBind();
// Same as yours
ListItem liSelectCount = new ListItem("Select a country...", "-1");
ddlCount.Items.Insert(0, liSelectCount);
}
Таким образом, используя этот код, ваш подход добавления "Выберите страну" работает хорошо , Вам просто нужно убедиться, что для параметра AutoPostBack
установлено значение True в элементе управления списком, иначе событие lbCont_SelectedIndexChanged
не будет срабатывать.
Пожалуйста, укажите, как он не работает. Что * точно * происходит, когда ваша функция здесь называется? – Jashaszun
Почему бы не просто скрыть выпадающее меню страны, пока не будет выбран континент? Я не мастер UX, но это кажется странным подходом к этому. – JohnnyFun
Когда я выбираю значение в списке, раскрывающийся список заполняется странами, в которых я хочу, чтобы он был заполнен, но «Выбрать страну ...» не отображается. – Kalkrin