2015-07-24 3 views
1

У меня есть список, который получает данные из моей базы данных, содержит имена континентов. У меня есть раскрывающийся список, который заполняется странами в зависимости от названия континента, выбранного в списке. Я хочу, чтобы в раскрывающемся списке «Выбрать страну» в качестве первого значения по умолчанию после выбора был сделан, но он не работает.Сохранять значение в верхней части выпадающего списка после выбора

это мой подход при выполнении его

protected void lbCont_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      ListItem liSelectCount = new ListItem("Select a country...", "-1"); 
      ddlCount.Items.Insert(0, liSelectCount); 
     } 
+0

Пожалуйста, укажите, как он не работает. Что * точно * происходит, когда ваша функция здесь называется? – Jashaszun

+0

Почему бы не просто скрыть выпадающее меню страны, пока не будет выбран континент? Я не мастер UX, но это кажется странным подходом к этому. – JohnnyFun

+0

Когда я выбираю значение в списке, раскрывающийся список заполняется странами, в которых я хочу, чтобы он был заполнен, но «Выбрать страну ...» не отображается. – Kalkrin

ответ

0

Я думаю, вам нужно вызвать метод DataBind() на вашем DDL после вставки в него ... я обеспокоен тем не менее, что у вас есть возможность вставляя эту опцию снова и снова, если они несколько раз меняют континент. Вероятно, вы должны проверить, есть ли там до его вставки.

+0

Это не помогло мне. Сожалею. – Kalkrin

1

Это проект 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 не будет срабатывать.

Смежные вопросы