2010-11-29 123 views
0

我有一個列表控件。我有來自對象的數據。該對象中有一個稱爲狀態ID的字段。列表控制數據過濾器asp.net

我有一個下拉框。下拉菜單中包含一個狀態ID字段。

最初所有數據都被彈出。

當我通過在下拉列表中選擇一個選項來點擊過濾器時,我希望我的列表中的狀態字段與下拉列表中的selecetd值相同。

頁面加載我正在使用foreach來填充列表控件。我在哪裏放置過濾器語句的下拉代碼。我應該把它放在if(!ispostback)還是在回發之外。

因爲每次我從下拉列表中選擇值,該列表將填入默認值。

請幫幫我。

+0

你能發表一些代碼嗎? – 2010-11-29 11:00:01

回答

1

從我從你的描述中可以理解,如果你把你的過濾代碼比頁面加載事件:

  • ,如果它是一個if {}塊比它裏面(Page.IsPostBack!)將僅在頁面首次渲染時執行 - 但您希望初始化所有數據並在您從下拉菜單中選擇一個選項後進行過濾;

  • 如果它在此塊之外,則它不正確,因爲當頁面上的任何控件導致回發時,不僅僅是當您要通過從下拉列表中選擇一個選項來進行回發時,它將被執行。

嘗試使用這樣的事情,而不是:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // executed only first time 
     // load data for both list control and drop down 
    }   
} 

protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // filter the data 
    // (or clear the items in the list control and fetch new data for the list 
    // control based on the status id selected in the drop down and rebind it) 
} 

不要忘記設置的AutoPostBack =「真」的下拉控制,否則SelectedIndexChanged事件不會導致回傳和數據當你改變選擇時(在一些其他控件導致回發之後)將不會被過濾。