2013-04-23 59 views
1

我想在C#中动态添加文本框,在表格行中单击一个按钮。为此我使用了下面的代码。 [1]:http://pastie.org/7702237如何动态地将文本框添加到C#中的表格行中

问题是我可以根据需要添加尽可能多的文本框,但是它们在相同的位置添加,我的意思是表格行不会为每个按钮点击递增,而是简单地用新的表替换旧的表格行一。请帮我解决这个问题。

在此先感谢 Ganesh神

回答

1

基于Web的应用程序不维护状态;为此,表格和任何变量的状态都没有被保留。每次回发(由按钮生成)时,表的状态将恢复到添加行之前的状态,然后以编程方式向其添加行。

为了实现您的目标,您需要以某种方式维护状态。在下面的代码片段我正在使用一个会话:

private List<TableRow> TableRows 
{ 
    get 
    { 
     if(Session["TableRows"] == null) 
      Session["TableRows"] = new List<TableRow>(); 
     return (List<TableRow>)Session["TableRows"]; 
    } 
} 

以下是你的代码修改与会话变量的工作:

TextBox txtE, txtM, txtB; 
Button btnAdd, btnDel; 

TableRow trow; 
TableCell tcell; 

foreach(TableRow tr in TableRows) 
    tblEduDetails.Controls.Add(tr); 

int count = TableRows.Count + 1; 

txtE = new TextBox(); 
txtE.ID = "E" + count.ToString(); 
txtE.Visible = true; 
txtE.Text = "E " + count.ToString(); 
txtE.BorderWidth = 2; 
txtE.TextMode = TextBoxMode.SingleLine; 
txtE.Height = 30; 

txtM = new TextBox(); 
txtM.ID = "M" + count.ToString(); 
txtM.Visible = true; 
txtM.Text = "M " + count.ToString(); 
txtM.TextMode = TextBoxMode.SingleLine; 
txtM.Height = 30; 

txtB = new TextBox(); 
txtB.ID = "E" + count.ToString(); 
txtB.Visible = true; 
txtB.Text = "B " + count.ToString(); 
txtB.TextMode = TextBoxMode.SingleLine; 
txtB.Height = 30; 

btnAdd = new Button(); 
btnAdd.ID = "A" + count.ToString(); 

btnDel = new Button(); 
btnDel.ID = "D" + count.ToString(); 

trow = new TableRow(); 
trow.ID = "R" + count.ToString(); 
trow.BorderWidth = 1; 

tcell = new TableCell(); 
tcell.ID = "E" + count.ToString(); 
tcell.Controls.Add(txtE); 
trow.Controls.Add(tcell); 

tcell = new TableCell(); 
tcell.ID = "B" + count.ToString(); 
tcell.Controls.Add(txtM); 
trow.Controls.Add(tcell); 

tcell = new TableCell(); 
tcell.ID = "M" + count.ToString(); 
tcell.Controls.Add(txtB); 
trow.Controls.Add(tcell); 

tblEduDetails.Controls.Add(trow); 
TableRows.Add(trow); 
+0

此以来的TableRow不是序列给出了错误,是什么可以做到吗? – Gaurravs 2016-07-28 10:52:31

相关问题