2012-06-12 115 views
1

欣賞以下建議:我有一個名爲CBL_categ的複選框列表,其中包含超過20個項目。我從中選擇一些項目,並將下面的代碼塊與按下按鈕相關聯。最後的總和總是零。爲什麼?處理複選框列表中的選定項目

protected void FButton_Click(object sender, EventArgs e) 
     { 
      int sum=0; 

      for (int i = 1; i < 20; i++) 
      { 
       if (CBL_categ.Items[i].Selected) 
        sum = sum + 1; 
      } 
      statusLabel.Text += " " + sum; 

     } 
+1

您是否嘗試過調試?我會添加花括號給for和if語句,以便更清楚地理解。但是,你的邏輯似乎對我來說是正確的。我唯一的猜測是你的物品沒有被設置爲某些原因選擇。 –

+0

格拉西亞斯!我加了大括號,但仍然一樣。我應該指定checkboxlist在Page_Load內部填充值,這可能是問題嗎?另一方面,此方法(FButton_Click)與Page_Load處於同一級別。 –

+0

看看這個例子。它可能有所幫助:http://www.ezineasp.net/post/Getting-Values-of-ASP-Net-CheckBoxList-Selected-Items.aspx –

回答

3

我不會使用您提供的代碼。它假設該列表將總是中有20個項目。這可能導致出界錯誤,而不是所有項目都被計算在內,等等。我會用這樣的:

protected void FButton_Click(object sender, EventArgs e) 
    { 
     int sum=0; 

     foreach(ListItem item in CBL_categ.Items) 
     { 
      if(item.Selected){ 
      sum++; 
      }    
     } 

     statusLabel.Text += " " + sum; 

    } 

這聽起來像什麼是你重新綁定您的列表框之前,你實際上得到這種方法。因此,例如,如果您的Page_Load方法如下所示:

protected void Page_Load(object sender, EventArgs e) 
{ 
     //This gets called before your event on postback and will erase your selected items. 
     BindListBox(); 
} 

這是否有意義?

編輯:

如果您的Page_Load看起來像修改它,它看起來像這樣來解決問題:

protected void Page_Load(object sender, EventArgs e) 
{ 
     if(!Page.IsPostBack){ 
      BindListBox(); 
     } 
} 
1

當你填入你的複選框列表確保你也檢查,如果該頁面不回傳即在Page_Load中檢查類似,如果(!Page.IsPostBack){填充您的列表} 否則就會只是覆蓋選擇。