0

ページ上の単純なテーブルで、最初のセルがいくつかあり、別のユーザーが入力する必要があります。私は ItemTemplate で DataList を使用します:

<ItemTemplate>
    <asp:TextBox ID="CellTextBox" runat="server" Text='<%# Bind("Cell") %>' />
</ItemTemplate>

コードでは、このコントロールの DataBind() をオーバーライドします。

public override void DataBind()
        {
            MyDataList.DataSource = dataTable;
            MyDataList.DataBind();
        }

今はうまくいきません。ユーザーはいくつかのセルを入力して送信ボタンをクリックしますが、dataTable (このボタンの OnClick イベントを処理するメソッド内) にはユーザーのデータが含まれていません。私は何をすべきか?

4

1 に答える 1

0

完全に理解しているかどうかはわかりませんが、ページの読み込み時にポストバックを確認する必要があるため、問題が発生している可能性があると思います. 次のようなことを試してみてください。

public void Page_Load(Object sender, EventArgs e)
{
  if (!this.IsPostBack)
  {
    myDataList.DataSource = myManager.GetDataTable();
    myDataList.DataBind();
  }
}

そうすれば、データは最初のページの読み込み時にのみコントロールにバインドされ、その後のポスト バック リクエストではバインドされません。Page_Load はリクエストごとに呼び出されます。これは、Page_Load 内のコードがボタン クリック メソッドの前に実行されることを意味します。したがって、ページの IsPostBack プロパティをチェックして、現在のリクエストがポスト バックかどうかを確認する必要があります。そうである場合は、ユーザーが入力した内容が失われるため、データをコントロールにバインドしないでください。

于 2009-12-06T22:13:41.380 に答える