2013-07-26 15 views
0

我有多個編程式添加的複選框。使用C#的Asp.net頁面:如何保留選中的複選框列表?

當他們被點擊時,我有一個方法激發,說如果他們被選中,將他們添加到我已經定義的列表中,並且如果他們未經檢查,將他們從列表中刪除。

我的問題是,每次我這樣做,列表似乎被重新創建,因爲它變成了空的。

編輯:

有點相關的代碼。

protected void check_clicked(object sender, EventArgs e) 
    { 
     CheckBox me = ((CheckBox)sender); 
     MenuNode m = ((MySpecialEventArgs)(e)).theVar; 
     if (me.Checked == true) 
     { 
      me.BackColor = System.Drawing.Color.AliceBlue; 
      checkedIDs.Add(m.ID, m.ID); 
     } 
     else 
     { 
      me.BackColor = System.Drawing.Color.YellowGreen; 
      checkedIDs.Remove(m.ID); 
     } 


    } 

    protected void button_clicked(object sender, EventArgs e) 
    { 
     String checkedMenus = ""; 
     foreach (int menuID in checkedIDs.Values) 
     { 
      checkedMenus +="'"+ menuID + "'"; 
     } 
    //Do DB Stuff 
    } 
+0

小心分享任何源代碼? – fuzz

+0

添加了一些源代碼。你還有什麼想看的嗎? – Stottymod3

回答

0

一個選項是將該列表存儲在會話中並使用屬性來保存或檢索它。請嘗試:

protected List<int> CheckedIDs 
{ 
    get 
    { 
     List<int> checkedIDs = new List<int>(); 
     if (Session["CheckedIDs"] != null) 
     checkedIDs = (List<int>)Session["CheckedIDs"]; 
     return checkedIDs; 
    } 
    set 
    { 
     Session["CheckedIDs"] = value; 
    } 
} 

修改check_Clicked和button_clicked:

protected void check_clicked(object sender, EventArgs e) 
{ 
    CheckBox me = ((CheckBox)sender); 
    MenuNode m = ((MySpecialEventArgs)(e)).theVar; 
    List<int> checkedIDs = CheckedIDs; 
    if (me.Checked == true) 
    { 
     me.BackColor = System.Drawing.Color.AliceBlue; 
     checkedIDs.Add(m.ID, m.ID); 
    } 
    else 
    { 
     me.BackColor = System.Drawing.Color.YellowGreen; 
     checkedIDs.Remove(m.ID); 
    } 
    CheckedIDs = checkedIDs; 
} 

protected void button_clicked(object sender, EventArgs e) 
{ 
    String checkedMenus = ""; 
    List<int> checkedIDs = CheckedIDs; 
    for (int i=0; i < checkedIDs.Count ; i++) 
    { 
     checkedMenus +="'"+ checkedIDs[i].ToString() + "'"; 
    } 
    //Do DB Stuff 
} 

希望它能幫助!

+0

謝謝,效果很好。 – Stottymod3

+0

不客氣! – afzalulh

0

您是否將您的複選框創建方法包裹在if!Page.IsPostBack中?您不應該將它們存儲在會話中,如果有的話我會將它存儲在ViewState中。

相關問題