2013-10-24 50 views
1

嗨,我幾天後真的陷入了我的一項開發任務中,我無法找到究竟發生了什麼事情。請幫忙。無法在asp.net中動態地添加多個服務器控件

我想按如下方式動態添加行到網頁。 我想使用服務器控件。但我無法添加多行。

即使我使用會話變量,也沒有運氣。請幫助請:)

----------------- aspx文件---------------

<div> 
    <asp:Table ID="tbl" runat="server"> 
     <asp:TableRow ID="rw0"> 
      <asp:TableCell ID="c01" Width="100px"> 
       <asp:CheckBox runat="server" ID="chk0" /> 
      </asp:TableCell> 
      <asp:TableCell ID="c02" Width="100px"> 
       <asp:TextBox runat="server" ID="txt0" /> 
      </asp:TableCell></asp:TableRow> 
     <asp:TableRow ID="rw1"> 
      <asp:TableCell ID="c11" Width="100px"> 
       <asp:CheckBox ID="chk1" runat="server" /> 
      </asp:TableCell><asp:TableCell ID="c12" Width="100px"> 
       <asp:TextBox runat="server" ID="txt1" /> 
      </asp:TableCell></asp:TableRow> 
    </asp:Table> 
    <asp:Button ID="btn1" runat="server" Text="Add Row" OnClick="addRow" /> 
</div> 

---------------------後面的C#代碼-------------------------- ----

protected void addRow(object sender, EventArgs e) 
    { 

     int num_row = new int(); //checkpoint 
     num_row = (tbl.Rows).Count; 

     if (Session["tables"] != null) 
     { 
      tbl = (Table)Session["tables"]; 
     } 


     TableRow row = new TableRow(); 
     TableCell cell1 = new TableCell(); 
     TableCell cell2 = new TableCell(); 
     TextBox tb = new TextBox(); 
     CheckBox cb = new CheckBox(); 

     row.ID = "rw" + num_row; 

     cell1.ID = "c" + num_row + "1"; 
     cell2.ID = "c" + num_row + "2"; 

     tb.ID = "txt" + num_row; 
     tb.EnableViewState = true; 
     cb.ID = "chk" + num_row; 

     cell1.Controls.Add(tb); 
     cell2.Controls.Add(cb); 

     row.Cells.Add(cell1); 
     row.Cells.Add(cell2); 

     tbl.Rows.Add(row); 
     Session["tables"] = tbl; 


    } 
+0

你可以合併你的聲明和賦值給你的num_row變量。 – Nzall

+0

你也可以使用ViewState,但是從表格中你可以知道沒有保存在會話中的行數。 – Izikon

+0

Thnaks很多人快速回復。 –

回答

1

你都能夠看到只有一行添加每次因爲,動態創建的控件將不會在回傳可用。

當您第一次點擊添加行時,發生回發,第三行被添加。當您第二次點擊添加行時,已添加的行將不可用,並且會再次添加新行。最後你每次只能看到一行。

底線是你必須重新創建動態添加控件每次在Page_Load事件回發,原因是動態添加服務器sontrols在回發DONOT堅持

參考Why dynamically created user controls disappear when controls are not doing full postbacks?

爲了保持動態添加控件的視圖狀態必須爲控件生成ID。在回發期間重新創建控件時,請使用相同的ID重新創建它們,以便保持視圖狀態。

使用一些標準邏輯來生成控件的ID。希望這可以幫助。

更新:

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (IsPostBack) 
      { 
       int num_row = (int)Session["No_of_Rows"]; 
       for (int i = 2; i < num_row; i++) 
       { 
        TableRow row = new TableRow(); 
        TableCell cell1 = new TableCell(); 
        TableCell cell2 = new TableCell(); 
        TextBox tb = new TextBox(); 
        CheckBox cb = new CheckBox(); 

        row.ID = "rw" + i; 

        cell1.ID = "c" + i + "1"; 
        cell2.ID = "c" + i + "2"; 

        tb.ID = "txt" + i; 
        tb.EnableViewState = true; 
        cb.ID = "chk" + i; 

        cell1.Controls.Add(cb); 
        cell2.Controls.Add(tb); 

        row.Cells.Add(cell1); 
        row.Cells.Add(cell2); 

        tbl.Rows.Add(row); 
       } 
      } 
      else 
      { 
       Session["No_of_Rows"] = 2; 
      } 
     } 

     protected void addRow(object sender, EventArgs e) 
     { 
      int num_row = (int)Session["No_of_Rows"]+1; 
      TableRow row = new TableRow(); 
      TableCell cell1 = new TableCell(); 
      TableCell cell2 = new TableCell(); 
      TextBox tb = new TextBox(); 
      CheckBox cb = new CheckBox(); 

      row.ID = "rw" + num_row; 

      cell1.ID = "c" + num_row + "1"; 
      cell2.ID = "c" + num_row + "2"; 

      tb.ID = "txt" + num_row; 
      tb.EnableViewState = true; 
      cb.ID = "chk" + num_row; 

      cell1.Controls.Add(cb); 
      cell2.Controls.Add(tb); 

      row.Cells.Add(cell1); 
      row.Cells.Add(cell2); 

      tbl.Rows.Add(row); 
      Session["No_of_Rows"] = tbl.Rows.Count; 
     } 
+0

謝謝Saranya但我不清楚創建id的邏輯我已經在上面的代碼中爲每個控件創建了id,我還將整個存儲在會話變量中,但仍然沒有運行:(你可以與我分享提示代碼的變化 –

+0

嗨Alwyn,我編輯了我的答案以反映所需的代碼更改,我假設默認你的表中有2行,你不需要將整個表存儲在會話變量中,只需要行數就足夠了。請注意,視圖狀態是你在文本框中提供的值也是在回發中持續存在的! – Saranya

+0

Super它的工作,關閉你的大腦。非常感謝:) –

0

的故事列中輸入值如何將所有值保存在數據庫表後?

+0

我希望你正在嘗試如何訪問動態創建的控件看看這個... [read me](http://stackoverflow.com/questions/19632949/how-to-access-dynamically-created-server-controls-在-ASP網) –

相關問題