1

ポストバック後にデータバインドされたアイテムにどのようにアクセスしますか?

私にはデータリストがあり、ユーザーが項目を選択すると、OnItemCommand イベントが発生し、イベント ハンドラーは次のようになります。

protected void dlResults_Select(object sender, DataListCommandEventArgs e)
{
  MyItem item = e.Item.DataItem as MyItem;
}

item は常に null です。データバインドされたアイテムにアクセスする方法はありますか?

4

4 に答える 4

1

DataItem プロパティは、ItemDataBound イベントを通じてアクセスされた場合にのみ null ではありません。オブジェクト/レコードを変更するために ID が必要な場合は、DataList のDataKeyFieldプロパティを設定して、DataKeys コレクションを設定できます。

<asp:DataList ID="DataList1" runat="server" DataKeyField="id">
</asp:DataList>

次に、OnItemCommand イベントで id を使用して、目的のオブジェクトをインスタンス化するか、データベース クエリのパラメーターとして使用できます。

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
    int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);
    MyItem item = new MyItem(id);
}
于 2009-10-31T20:16:05.560 に答える
0

このタイプの問題に対して私が見つけた最も簡単な方法は、コントロールの選択された値で入力コントロール (type=hidden) を更新する JavaScript イベントをコントロールに追加することです。runat=server 属性をタグに追加すると、入力制御サーバー側にアクセスして値を読み取ることができます。ポストバックは JavaScript イベントの後に起動する必要があるため、他のすべては「正常に」機能するはずです。

于 2009-10-31T19:17:23.453 に答える
0

ここにいくつかの提案があります。

于 2009-10-31T04:10:44.100 に答える
0

質問に対する適切な回答は、データ バインディングの方法を理解した後にのみ提供できます。データリストの .DataBind() メソッドを呼び出してコードからデータバインディングを行っていますか、それともバインド元のデータリストにデータソースを提供していますか? この質問をする理由は、データリストをバインドするコードからデータリストの .DataBind() メソッドを使用している場合、ポストバックごとに呼び出して、データリストが再びデータバインドされるようにする必要があるためです。そうしないと、ポストバック後にデータリストが空であることがわかります。DataSource または DataSourceId プロパティを使用してバインド元のデータリストにデータソースを提供する場合、各ポストバックでのデータリストのデータバインディングはフレームワークによって処理されるため、気にする必要はありません。

しかし、一見すると、間違った場所で DataItem の値を取得しようとしているため、値を null として取得していると思います。コントロールを希望どおりに機能させるには、コントロールの適切なライフサイクルに従う必要があることに注意してください。

上記の私の質問に答えていただければ、より良い回答を提供できます。あなたの現在の声明は、適切な回答を提供するには不十分なようです。

于 2009-11-03T23:10:10.393 に答える