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

のIDを生成するために使用する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);
    }
}

DataBound controlそれ以外の場合は、以前と同じ ID を使用してポストバックで動的に作成された各コントロールを再作成する必要があるため、GridView または別の を使用することを強くお勧めします。

于 2012-07-18T16:46:51.547 に答える
0

ASP.NET 2.0 では、コントロールのプロパティが としてTextboxマークされ、クライアント側の変更が無視され、ポストバック全体で同じ変更が失われる設計変更がありました。プロパティ オプションを使用してテキスト ボックスを読み取り専用にする代わりに、その機能が必要な場合。コードを追加します。ReadOnlytrue

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 に答える