2012-01-11 76 views
1

好吧,所以在這個項目我的工作我想提出一個硬編碼的asp:面板的頁面上,然後用加油吧:如何從動態創建的TableRow C#/ Asp.Net獲取信息?

  1. 下拉列表
  2. 一個asp:表,與ASP :TableHeaderRow
  3. 添加和取消按鈕

當SelectedIndexChanged事件與DropDownList中的tablerow的被創建然後填充6個左右tablecells然後讓ASP發生了:文本框放在他們的裏面。

最終它們都被添加到表格然後被添加到表格集合中。

這一切都工作得很好,但是當我去從這些動態創建的TableRows與foreach循環添加信息時,他們沒有找到的地方,但TableHeaderRow是。

另外,當我點擊添加並讓它通過這個過程時,我得到沒有空的異常,它是頭後留下的唯一的東西,我所有的行都消失了。

反正我覺得我只是失去了一些真正愚蠢的東西。我已經瀏覽了很多論壇,帖子,MSDN,並且從未找到我的問題的答案。任何幫助將不勝感激!

+0

首先,您應該展示如何在循環中創建它們,將它們添加到表格中以及在回送中重新創建它們的位置。 – 2012-01-11 19:01:16

+0

你什麼時候嘗試向這些控件添加信息?你在哪裏創建它們?你知道ASP.NET頁面生命週期嗎? – Oded 2012-01-11 19:01:20

回答

2

您需要將您的動態行添加到您的表中Page_Init而不是Page_Load。如果您在Page_Load中創建它,您的新行將不會添加到ViewState中,您將看到此問題。

不幸的是,你正在添加它們來響應服務器端事件,這可能會變得棘手。您仍然需要添加Page_Init中的行,但是當頁面回覆並且您處於Page_Init時,那麼selectedIndexChanged事件尚未觸發。在頁面生命週期中,這太早了。

如果你想知道它是否已經在Page_Init解僱了,我發現的唯一方法是通過在該點檢查Request.Form("__EVENTTARGET")收藏。這包含觸發回發的控件的控件ID - 在您的情況下,這將是下拉列表。觸發該事件的控件將在那裏,但該ID將被限定,即不是MyControID,而是ctl_MasterPageContentHolderID_NamingContainer1_MyControlID`或類似的 - 所以在查找它時必須考慮到它。一旦確定該事件已經觸發,您可以添加行。一旦它們被添加到那裏,它們就不會消失。

正如我所說,工作很棘手,但我過去成功地做到了這一點。基於這個原因,動態控件通常很難處理。您可能想要考慮替代方案。無論如何,祝它好運。

相關問題