2012-07-18 58 views
0

這裏是我的代碼 -回發一個文本框VS標籤

dtDetails = getDataSet(); 

foreach (DataRow dr in dtDetails.Rows) { 

    int rowID = 1; 
    HtmlTableRow row = new HtmlTableRow(); 
    { 
     HtmlTableCell cell = new HtmlTableCell(); 
     TextBox tb = new TextBox(); 
     tb.ID = "tbJanuary" + rowID; 

     tb.Text = dr["Jan"].ToString(); 

     cell.Controls.Add(tb); 
     row.Cells.Add(cell); 
    } 

    rowID ++; 
} 

當這個最初運行時,我讓我的文本框中的正確的價值觀。

但是,當我通過點擊頁面上的按鈕更新數據庫中的值時,它會導致預期的PostBack。當我回到這個循環時,dr [「Jan」]。ToString()具有新的正確的值,但不會更新該文本框。

如果我修改代碼,這一點 -

dtDetails = getDataSet(); 

foreach (DataRow dr in dtDetails.Rows) { 

    int rowID = 1; 
    HtmlTableRow row = new HtmlTableRow(); 
    { 
     HtmlTableCell cell = new HtmlTableCell(); 
     Label lbl = new Label(); 
     lbl.ID = "lblJanuary" + rowID; 

     lbl.Text = dr["Jan"].ToString(); 

     cell.Controls.Add(lbl); 
     row.Cells.Add(cell); 
    } 

    rowID ++; 
} 

標籤包含正確的新值。

這是什麼文字框不顯示正確的值?

+0

爲什麼你不是使用'GridView'嗎?管理動態控件通常是相當痛苦的。 – Candide 2012-07-18 16:47:45

+0

長篇故事。我更喜歡使用這種方法,因爲它對我的AJAX調用更好。 – duckmike 2012-07-18 17:54:20

回答

0

您永遠不會增加int變量rowID,您可以使用它來生成Label的ID。

所以我認爲這會導致ViewState無法正常工作。

試試這個:

foreach (DataRow dr in dtDetails.Rows) { 

    int rowID = 1; 
    HtmlTableRow row = new HtmlTableRow(); 
    { 
     HtmlTableCell cell = new HtmlTableCell(); 
     TextBox tb = new TextBox(); 
     tb.ID = "tbJanuary" + rowID++; 

     tb.Text = dr["Jan"].ToString(); 

     cell.Controls.Add(tb); 
     row.Cells.Add(cell); 
    } 
} 

APAT,我會強烈建議使用GridView或其他DataBound control,否則你需要像以前一樣重新在具有相同ID回發的每個動態創建的控制。

+0

我實際上增加了rowID,只是忘了把它放在我的例子中。 – duckmike 2012-07-18 17:25:09

+0

看到我的編輯... – duckmike 2012-07-18 17:25:22

0

ASP.NET 2.0只讀使用了設計變更,通過該Textbox控制標明其ReadOnly財產true,會忽略客戶端的變化,並會失去整個postback.If同你想要的功能,而不是使文本框屬性選項。添加代碼:

TextBox1.Attributes.Add("readonly", "readonly"); 

在代碼隱藏它仍然會在文本框爲只讀,並且每次回發

所以之後也將保留的價值,你的代碼應該是這樣的:

dtDetails = getDataSet(); 

foreach (DataRow dr in dtDetails.Rows) { 

    int rowID = 1; 
    HtmlTableRow row = new HtmlTableRow(); 
    { 
     HtmlTableCell cell = new HtmlTableCell(); 
     TextBox tb = new TextBox(); 

     tb.ID = "tbJanuary" + rowID; 

     tb.Text = dr["Jan"].ToString(); 
     tb .Attributes.Add("readonly", "readonly"); 
     cell.Controls.Add(tb); 
     row.Cells.Add(cell); 
    } 
} 
+0

這沒有幫助 – duckmike 2012-07-18 17:21:11

+0

您是否在給文本框賦值之後定義了只讀屬性... – 2012-07-18 17:42:16

+0

是的,我是這樣做的,就像您的示例一樣。 – duckmike 2012-07-18 17:56:40