2011-03-01 16 views
2

因此,我有一個國家下拉列表和一個狀態下拉列表,該列表正在根據所選國家/地區動態填充。當我點擊國家時,狀態下拉列表填充得很好,但是當我從另一個下拉列表中點擊一個值(狀態)時,問題就出現了,而不是保留所選項目的列表將返回到列表的第一項並且沒有選定的值顯示。DropDown列表重置爲第一項並且不返回選定的值

<td><asp:DropDownList ID="ddlState" runat="server" 
    DataSourceId="dsStateList" 
    DataTextField="state_nm" 
    DataValueField="state_cd" 
    OnSelectedIndexChanged="ddlState_SelectedIndexChanged" 
    AutoPostBack="true" 
    AppendDataBoundItems="true" 
    Width="160px" OnDataBound="ddlState_OnDataBound"> 
    </asp:DropDownList> 
</td> 

    <asp:DropDownList ID="ddlCountry" runat="server" 
    DataSourceId="dsCountryList" 
    DataTextField="COUNTRY_NAME" 
    DataValueField="COUNTRY_CIA_ID" 
    OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged" 
    OnDataBound="ddlCountry_OnDataBound" 
    AutoPostBack="true" 
    AppendDataBoundItems="true" 
    Width="160px"> 
    </asp:DropDownList> 


protected void ddlState_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string comboStateCODE = ddlState.SelectedValue; 
    dsCompanyListParam.Text = comboStateCODE; 
    ddlCountry.DataBind(); 
    ddlState.DataBind(); 
} 

protected void ddlState_OnDataBound(object sender, EventArgs e) 
{ 
    ddlState.Items.Insert(0, "Please Select a State"); 
} 
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ddlState.Items.Clear(); 
    dsStateList.SelectParameters["iCountryID"].DefaultValue = ddlCountry.SelectedValue; 

    dsCompanyListParam.Text = ddlCountry.SelectedValue; 
    Trace.Warn("ddlCountry_SelectedIndexChanged"); 

    ddlCountry.DataBind(); 
    ddlState.DataBind(); 

} 
protected void ddlCountry_OnDataBound(object sender, EventArgs e) 
{ 
    ddlCountry.Items.Insert(0, "Please Select a Country"); 
} 

回答

7

我相信在你的Page_Load某處()你正在打電話到填充下拉列表的方法......你需要封裝成一個IF回傳街區:

// somewhere in PageLoad()... 
If(!IsPostBack) 
{ 
    PopulateDropdown(); 
} 

使用上面的慣例,下拉列表只會在第一次加載頁面時填充。我懷疑發生的事情是,當您從另一個下拉列表中進行選擇時,AutoPostBack正在執行Page_Load()方法(因爲它應該)並再次重新填充下拉列表。

使用上述慣例應該有助於避免這種情況。

0

你的狀態下拉設置爲自動回 - 這可能是你的代碼來填充國家下拉上回發再次執行,從而使所選擇的狀態無效,因爲該國的下拉被重新填充

0

我會刪除ddlCountry.DataBind();來自ddlState_SelectedIndexChanged事件。我不明白爲什麼你需要在那裏做另一個DataBind。

0

解決了! 好的,任何人都會遇到類似的問題,並且找不到任何其他領域來查看我是如何解決這個愚蠢的問題的。 首先,我使用的是存儲過程,存儲過程將兩個字段的值連接起來。我設置參數整數(4),我沒有注意到有幾個國家代碼大於4.所以基本上,它返回一個NULL selectedvalue,這反過來將不會產生任何值,因爲我的onselectedindexchanged方法是基於選定的值,並且由於某種原因沒有處理NULL。 所以是的,檢查你存儲的特效和參數數據! :D 感謝您的時間!

相關問題