使用文本框和标签回发

时间:2012-07-18 16:36:23

标签: c#

这是我的代码 -

dtDetails = getDataSet();

foreach (DataRow dr in dtDetails.Rows) {

    int rowID = 1;
    HtmlTableRow row = new HtmlTableRow();
    {
        HtmlTableCell cell = new HtmlTableCell();
        TextBox tb = new TextBox();
        tb.ID = "tbJanuary" + rowID;

        tb.Text = dr["Jan"].ToString();

        cell.Controls.Add(tb);
        row.Cells.Add(cell);
    }

    rowID ++;
}

当这最初运行时,我在文本框中得到正确的值。

但是,当我通过按钮点击页面更新数据库中的值时,会导致预期的PostBack。当我回到这个循环时,dr [“Jan”]。ToString()具有更改的新正确值基础,但是oage上的文本框永远不会更新。

如果我将代码更改为 -

dtDetails = getDataSet();

foreach (DataRow dr in dtDetails.Rows) {

    int rowID = 1;
    HtmlTableRow row = new HtmlTableRow();
    {
        HtmlTableCell cell = new HtmlTableCell();
        Label lbl = new Label();
        lbl.ID = "lblJanuary" + rowID;

        lbl.Text = dr["Jan"].ToString();

        cell.Controls.Add(lbl);
        row.Cells.Add(cell);
    }

    rowID ++;
}

标签包含正确的新值。

没有显示正确值的文本框是什么?

2 个答案:

答案 0 :(得分:0)

您永远不会递增用于生成int ID的rowID变量Label

所以我认为这导致ViewState无法正常工作。

试试这个:

foreach (DataRow dr in dtDetails.Rows) {

    int rowID = 1;
    HtmlTableRow row = new HtmlTableRow();
    {
        HtmlTableCell cell = new HtmlTableCell();
        TextBox tb = new TextBox();
        tb.ID = "tbJanuary" + rowID++;

        tb.Text = dr["Jan"].ToString();

        cell.Controls.Add(tb);
        row.Cells.Add(cell);
    }
}

Apat,我强烈建议使用GridView或其他DataBound control,因为否则你需要使用与以前相同的ID在回发上重新创建每个动态创建的控件。

答案 1 :(得分:0)

ASP.NET 2.0进行了一次设计更改,Textbox控件标记为ReadOnly属性为true,会忽略客户端更改,并且会在回发时丢失相同的内容。如果你想要的功能,而不是使用属性选项使文本框只读。添加代码:

TextBox1.Attributes.Add("readonly", "readonly");

在代码隐藏中,仍会使文本框成为只读文件,并且每次回发后也会保留该值

所以,你的代码应该是这样的:

dtDetails = getDataSet();

foreach (DataRow dr in dtDetails.Rows) {

    int rowID = 1;
    HtmlTableRow row = new HtmlTableRow();
    {
        HtmlTableCell cell = new HtmlTableCell();
        TextBox tb = new TextBox();

        tb.ID = "tbJanuary" + rowID;

        tb.Text = dr["Jan"].ToString();
        tb .Attributes.Add("readonly", "readonly");
        cell.Controls.Add(tb);
        row.Cells.Add(cell);
    }
}