2013-02-24 96 views
1

我試圖做一個頁面加載一個未定義數量的行到表中,每行包含兩列,一列一個字符串,另一個文本框。當我點擊提交按鈕時,我希望能夠檢索輸入到每個文本框中的值。在asp.net中尋址動態創建的文本框控件C#

上半場我可以做,顯然在真正的代碼中,這將在foreach循環中,並且文本框ID分配了一個唯一的值,我可以稍後重新調用它。

TableCell myCell = new TableCell(); 
myCell.Text = "StudentID"; 
TableCell nextCell = new TableCell(); 
TextBox mytext = new TextBox(); 
mytext.ID = "TxtBox1"; 
nextCell.Controls.Add(mytext); 
TableRow myRow = new TableRow(); 
myRow.Cells.Add(myCell); 
myRow.Cells.Add(nextCell); 
TableStuUploads.Rows.Add(myRow); 

當我點擊我的提交按鈕,我嘗試運行這段代碼(只是臨時代碼ATM,概念的東西證明):

TextBox tmptext = (TextBox)FindControl("TxtBox1"); 
Label1.Text = tmptext.Text; 

但是,設置tmptext爲空,我得到一個下一行的空指針異常。那麼我試了

TextBox tmptext = (TextBox)TableStuUploads.FindControl("TxtBox1"); 
Label1.Text = tmptext.Text; 

同樣的錯誤。然後我試了

foreach (Control x in TableStuUploads.Controls) 
      { 
       if (x.GetType().ToString().Equals("System.Web.UI.WebControls.TextBox")) 
       { 
        Label1.Text = ((TextBox)x).Text; 

       } 
      } 

但是當調試這個時,我看到TableStuUploads.Controls的計數爲零。

我該如何解決這些動態創建的控件?我已經四處搜尋了,我得到的答案讓我知道了我已經嘗試過的三種解決方案。我哪裏錯了?

回答

2

您可能不會在回發時重新創建動態控件。這對於找到每個控件並檢索每個控件的值都是必需的。

此外,最好使用中繼器來創建這些控件,它更易於維護和調試。

+0

好了,你說我需要在頁面加載時運行函數來創建表格? – 2013-02-24 17:54:22

+0

您可以在頁面加載期間運行該函數,但最好在「OnInit」事件中運行該函數。 – 2013-02-24 17:58:50

+0

此外,你有沒有考慮過我提供的Repeater建議? – 2013-02-24 18:02:20

1

編輯

您需要重新創建你在每次回發(的Page_Load)表像@ShaiCohen他回答說,那麼你需要的東西ILKE:

foreach (TableRow item in TableStuUploads.Rows) 
{    
    TextBox tmptext = (TextBox)item.FindControl("TxtBox1"); 
    Label1.Text = tmptext.Text; 
} 
+0

TableStuUploads.Rows也有一個計數爲零。 – 2013-02-24 17:52:15

+0

您需要在每次回發(page_load)上重新創建表格,就像@ShaiCohen在回答中所說的那樣,之後您可以看到行 – RedDevil79 2013-02-24 17:57:55

+0

是的,在page_load中重新創建表格之後,您的代碼現在可以工作,非常感謝:) – 2013-02-24 18:12:06

相關問題