2008-11-18 3 views
1

У меня есть форма с 2 DDL имениPopulate жерех: DropDownList - VS 2008

Штат и Город

Состояние:

<asp:UpdatePanel ID="States" runat="server" UpdateMode="Conditional"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="States"EventName="SelectedIndexChanged" /> 
     </Triggers> 
     <ContentTemplate> 
      <asp:DropDownList ID="States" runat="server" 
      AutoPostBack="True" DataSourceID="StatesObjectDataSource" 
      AppendDataBoundItems="true" 
       onselectedindexchanged="States_SelectedIndexChanged"> 
      <asp:ListItem Value="-1" Text="- None -"/>  
      </asp:DropDownList> 
      <asp:ObjectDataSource ID="StatesObjectDataSource" runat="server" 
       onselecting="StatesObjectDataSource_Selecting" 
       SelectMethod="GetStates" 
       TypeName="Something"> 
      </asp:ObjectDataSource> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

Город:

<asp:DropDownList ID="Cities" runat="server"> 
     </asp:DropDownList> 

Когда они выбирают Я хочу заполнить города DDL всеми городами для этого штата.

В коде позади я могу добраться до

States_SelectedIndexChanged(object sender, EventArgs e) 

и я пытаюсь заполнить Города DDL этой

Cities.Items.Add(new ListItem(city,city)); 

Однако, я не вижу моего города DDL заселена

ответ

2

Я рекомендую создать частную собственность в ViewState, которая содержит коллекцию физических объектов. Затем добавьте объект в этот список, затем привяжите список объектов к выпадающему списку.

Страница За

<asp:DropDownList runat="server" ID="ddlCity" DataValueField="Key" DataTextField="Value"> 
</asp:DropDownList> 

кодекса За

private List<KeyValuePair<string, string>> ListData 
{ 
    get { return (List<KeyValuePair<string, string>>) (ViewState["ListData"] ??  
       (ViewState["ListData"] = new List<KeyValuePair<string, string>>())); } 
    set { ViewState["ListData"] = value; } 
} 

protected void States_SelectedIndexChanged_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ListData.Add(new KeyValuePair<string, string>(ddlCitys.SelectedValue, ddlCitys.SelectedValue)); 
    ddlCitys.DataSource = ListData; 
    ddlCitys.DataBind(); 
} 

ГЭТ заявление также использует отложенную загрузку на имущество ListData так что вы никогда не столкнетесь с нулевой ссылочный исключение при доступе к списку.

1

Если возможно, я бы предложил использовать CascadingDropDown Extender вместо UpdatePanel. Нет необходимости повторно изобретать это колесо, а элемент управления Toolkit использует веб-службы вместо частичных обратных передач (намного быстрее).

+0

Dave: Я получаю свои данные с использованием уровня доступа к данным SUBSONIC и не имею веб-службы. Будет ли расширенный расширитель CascadingDropDown работать с объектом List <>. Также вы можете пролить свет на то, почему вы рекомендуете это по панели обновления? – user38230 2008-11-19 10:55:31

1

Место вашего города DropDownList внутри панели обновления.

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