2011-06-15 50 views
0

我想讓應用程序允許用戶選擇一些數字行,然後在用戶提交表單後在服務器端執行一些操作。我遇到的問題是,如果我重新加載表,我只是返回默認值,如果我沒有,表是空的。下面是代碼:修改表asp.net

<asp:Table ID="tbl" runat="server"> 
     <asp:TableRow> 
      <asp:TableHeaderCell>Question</asp:TableHeaderCell> 
      <asp:TableHeaderCell>Answer</asp:TableHeaderCell> 
     </asp:TableRow> 
    </asp:Table> 

C#:

protected System.Web.UI.WebControls.Table tbl1; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      init_tbl(); 
     } 
    } 
    protected void init_tbl() 
    { 
     tbl1.BorderWidth = 1; 
     TableRow tr = new TableRow(); 
     tc = new TableCell(); 
     tc.Text = "text"; 
     tc.BorderWidth = 1; 
     tr.Cells.Add(tc); 

    ddl = new DropDownList(); 
    ddl.ID = "r" + index; 
    ddl.Attributes["runat"] = "server"; 

    ListItem item; 
    for (int i = 1; i <= 10; i++) 
    { 
     item = new ListItem(); 
     item.Text = i.ToString(); 
     item.Value = i.ToString(); 
     if (i.ToString().Equals(r.Trim())) 
     { 
      item.Selected = true; 
      } 
      ddl.Items.Add(item); 
     }  
     list.Add(ddl); 
     tc.Controls.Add(ddl); 

     tc.ID = "tblr" + index; 
     tr.Cells.Add(tc); 

     tbl1.Rows.Add(tr); 
    } 
+1

爲什麼不使用GridView或DataGrid?這將是一個更好的解決方案爲您的prblm – Chandu 2011-06-15 21:16:24

回答

1

你的問題是與asp.net處理動態控制的複雜方式,你需要在頁面init上創建動態控制,在視圖狀態設置之前,控件的狀態保留在帖子上,請參閱本文http://geekswithblogs.net/shahed/archive/2008/06/26/123391.aspx

你應該看看gridview或者至少有一箇中繼控件。

+0

問題是,即使當我嘗試在init中打印tbl.row.count我只得到硬編碼的值,而不是動態創建的,所以它總是返回1.在初始化控制中的 – user776530 2011-06-15 22:39:04

+0

狀態沒有從視圖狀態更新,如果在「保存按鈕」單擊事件中執行了tbl.row.count,控制狀態將被正確設置。 – rabs 2011-06-16 04:45:54

0

我只想讓問題和的DataBind他們中繼/ GridView控件/數據網格列表(如@Cyber​​nate說的),然後添加事件方法添加到數據綁定器的OnItemDataBound。

在ItemDataBound事件中,我將得到每個問題DataItem的答案列表,並將它們添加到DropDownList中,就像您上面正在做的那樣。

當用戶填寫所有答案時,您只需要通過Request.Form數組並找到所有將傳回的答案。

0

您將該表存儲在ViewState中並按需要使用它。

+0

當我嘗試將表添加到視圖狀態時,我不斷收到序列化異常 – user776530 2011-06-16 15:46:14