2011-08-10 142 views
1

我有一個頁面,我創建2個複選框動態。獲取按鈕上的動態複選框值點擊

TableRow tr = new TableRow(); 
        for (int i = 0; i < 2; i++) 
        { 
         TableCell Tc = new TableCell(); 


          Tc.Attributes["style"] = "line-height: 30px; text-align: left"; 
          Tc.Attributes["width"] = "50%"; 
          Tc.Style.Add("padding-left", "5px"); 
          //Checkboxes on left along with labels 
          CheckBox checkBoxCtrl = new CheckBox(); 
          checkBoxCtrl.ID = "checkBoxCtrl" + i; 
          Tc.Controls.Add(checkBoxCtrl); 
          tr.Cells.Add(Tc);       
        } 

一旦它們在頁面加載事件創建我有一個要求,以檢查是否複選框被選中或不Ok_button click事件。

protected void Update2_Click(object sender, EventArgs e) 
     { 


     if(checkBoxCtrl.checked) 
      //here i wont be able to get the value 
      // i get the error the name checkBoxCtrl does not exist.. 
      { 
      response.write("true"); 
      } 

     } 

但我該如何做這種情況下的檢查。

感謝

答:

這是需要做獲得的複選框什麼樣的價值觀

protected void Update1_Click(object sender, EventArgs e) 
    { 
     for(int i = 0; i < ControlPropList.Count; i++) 
     {    
      CheckBox chkTest = (CheckBox)xxx.FindControl("checkBoxCtrl" + i); 
      { 
       if (chkTest.Checked) 
       { 
        Global.logger.Info("Checkbox True = " + chkTest.ID); 
       } 
       else 
       { 
        Global.logger.Info("Checkbox False = " + chkTest.ID); 
       } 
      } 
     } 
    } 
+0

您需要將該複選框保存在該用戶的Session中,並在每個頁面加載時添加複選框,並確保您保留對它們的代碼隱藏引用。它也可以用JavaScript來完成,所以它在客戶端上執行,如果這就是你想要的。 – MrFox

回答

1

爲您添加複選框這應該工作正常,只要您的頁面在Page_PreInit方法中。如果您在此之後添加它們(例如Page_Load),則它們的值將不會保留。

閱讀有關asp.net頁面生命週期的位置:

http://msdn.microsoft.com/en-us/library/ms178472.aspx

+0

我知道這個作品它創建一個複選框..但在創建頁面後,假設我檢查複選框,然後單擊確定按鈕如何檢查是否找到與動態複選框ID複選框並從中獲取值? – user175084

+1

你到底是怎麼做的。我所說的是儘管你仍然可以看到複選框,並且如果你在Page_Load上創建它,你將能夠點擊它,除非你將它添加到Page_PreInit的頁面中,否則你將無法正確檢查它的值。 – Erix

+0

我需要在page_init和page_load中創建,還是隻有page_init會做?如果頁面加載發生/ ..感謝 – user175084

1

考慮存儲在本地成員的動態複選框:

private CheckBox _myCustomCheckbox = new CheckBox(); 

    protected override void OnInit(EventArgs e) 
    { 
     TableRow tr = new TableRow(); 
     for (int i = 0; i < 2; i++) 
     { 
      TableCell Tc = new TableCell(); 

      if (i == 0) 
      { 
       Tc.Attributes["style"] = "line-height: 30px; text-align: left"; 
       Tc.Attributes["width"] = "50%"; 
       Tc.Style.Add("padding-left", "5px"); 
       //Checkboxes on left along with labels 

       _myCustomCheckbox.ID = "checkBoxCtrl" + j; 
       Tc.Controls.Add(_myCustomCheckbox); 
       tr.Cells.Add(Tc); 
      } 
     } 

     // the row needs added to a page control so that the child control states can be loaded 
     SomeTableOnThePage.Controls.Add(tr); 

     base.OnInit(e); 
    } 

    protected void Update2_Click(object sender, EventArgs e) 
    { 
     if(_myCustomCheckbox.Checked) 
     { 
      response.write("true"); 
     } 
    } 
+0

謝謝這很好..如果有多個複選框,我該如何檢查然後..? – user175084

+0

請你能看到我的編輯,因爲我將有2個複選框與ID的checkBoxCtrl0和checkBoxCtrl1,我需要檢查他們兩個...如果我解決這個問題,我很好 – user175084

0

可能沒你想要什麼,但我有一個類似的問題,我在ASP.NET頁面中有一個動態生成的表格,在一列中有動態生成的CheckBoxes。我從一個集合創建了表的數據,然後在創建動態CB時,我給它們一個ID並將它們存儲在第二個集合中,比如一個CB數組。

因此,當我需要找到Checked值時,我只需遍歷集合,並且可以找到Checked的集合。

此外,由於它們是與動態表中的數據同時創建的,因此我可以輕鬆地將表數據行綁定到複選框值。

這顯然假設動態表和CB是使用某種循環創建的。

這可能不是最好的解決方案,但適用於我目前的需求。