如何动态地将文本框添加到C#中的表行

时间:2013-04-23 10:54:00

标签: c# textbox dynamically-generated

我希望在表格行中单击按钮时在C#中动态添加文本框。因为我使用了以下代码。          [1]:http://pastie.org/7702237

问题是我能够添加尽可能多的文本框,但是他们在相同的位置添加,我的意思是表格行没有为每个按钮点击增加,而是简单地用新的表格替换旧的表格行。请帮我解决这个问题。

提前致谢 内甚

1 个答案:

答案 0 :(得分: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);