1

次のようなリスト ビュー イベントを処理するときに、リスト ビューにデータバインドされたデータにアクセスしたいと考えています。

protected void List_ItemDataBound(object sender, ListViewItemEventArgs e)

また

protected void List_ItemCommand(object sender, ListViewCommandEventArgs e)

イベント内では、次のような方法でデータにアクセスできませんEval("ID")

現在、非常にハックなソリューションを使用しています。

string id = e.Item.FindControl("lblID").Text;

lblID以下を使用して、aspx ファイル内のデータが取り込まれた非表示のコントロールはどこにありますか。

<asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>' />

これを見ると目が充血します。もっと良い方法はありますか?

4

3 に答える 3

1

ほのめかした ItemDataBoundEvent ソリューションを拡張するだけで、ListView の DataKeys を介して ItemDataBoundEvent のデータにアクセスする必要はありません。e.Item を ListViewDataItem にキャストすると、基になるデータ型にキャストできる DataItem プロパティにアクセスできるようになり、基になるすべてのデータ フィールドにインテリセンスでアクセスできるようになります。例:-

(ActualDataType)(((ListViewDataItem)e.Item).DataItem)
于 2012-08-01T08:45:29.237 に答える
1

イベント ハンドラーで、EventArgs オブジェクトを使用します。

e.Item.DataItem

探しているオブジェクトが表示されます。その後、必要なタイプにキャストするだけです。

このMSDN ページには、より完全な例があります。

ItemCommand イベント ハンドラーの場合、このオプションがない場合があります。この場合、(または使用しているものは何でも)のプロパティCommandNameCommandArgumentプロパティを使用します。LinkButtonID を CommandArgument として入力すると、イベント ハンドラーのイベント引数オブジェクトからこれを取得できます。

于 2010-06-04T13:40:48.413 に答える
1

少しいじくり回した後、適切な解決策を見つけました:

リスト ビューにデータ キーを追加する必要があります。リストビューにデータバインドされているデータとは異なり、データ キーは永続的です。データ キーを設定するには、ListView タグで名前を指定するだけです。

<asp:ListView ID="MyListview" runat="server" DataKeyNames="ID" ...... 

次に、イベントからキーにアクセスします。

protected void MyListView_ItemCommand(object sender, ListViewItemEventArgs e)
{
    // Get the item index of the Item
    int itemIndex = ((ListViewDataItem)e.Item).DisplayIndex;

    // Extract the key and cast it to its data type.
    DataKey key = ((ListView)sender).DataKeys[itemIndex];
    int myId = (int) key;

    // Use ID to delete / modify the item in the SQL database....
}
于 2010-06-04T14:46:32.563 に答える