0

这是我的代码 -

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 ++;
}

标签包含正确的新值。

没有显示正确值的文本框是怎么回事?

4

2 回答 2

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);
    }
}
于 2012-07-18T16:55:51.020 回答
0

您永远不会增加int用于rowIDLabel.

所以我认为这会导致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);
    }
}

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

于 2012-07-18T16:46:51.547 回答