ListViewコントロールがあり、DataBoundイベント(これが正しいかどうかわかりません)をコントロールに追加しました。DataBoundイベントでListViewにバインドされているデータを取得します。
このイベントから、その特定のItemTemplateにバインドされているデータにアクセスしたいのですが可能ですか?回避策を見つけ
ListViewコントロールがあり、DataBoundイベント(これが正しいかどうかわかりません)をコントロールに追加しました。DataBoundイベントでListViewにバインドされているデータを取得します。
このイベントから、その特定のItemTemplateにバインドされているデータにアクセスしたいのですが可能ですか?回避策を見つけ
protected void listView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
ListViewDataItem dataItem = (ListViewDataItem)e.Item;
// you would use your actual data item type here, not "object"
object o = (object)dataItem.DataItem;
}
}
はまだ一種の私を困惑します。しかし、理由があるに違いない。
は、私は私が必要とどのようにデータをフォーマットする方法を作成し、使用したマークアップからそれを呼ばれる:
<%# doFormatting(Convert.ToInt32(Eval("Points")))%>
このソリューションは、ItemDataBoundイベントで捕捉するよりも優れています。唯一の提案は、あなたのメソッド 'doFormatting'の中で' null'か 'DBNull'を確認することです。 –
少し遅れて、しかし私は、私のように、あなたの質問にお答えしてみます同じ問題を抱えていて、解決策を見つけました。あなたはListViewDataItemにListViewItemEventArgsのItemプロパティをキャストする必要があり、その後、あなたはこのように、そのオブジェクトののDataItemプロパティにアクセスすることができます
Private Sub listView_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles productsList.ItemDataBound
If e.Item.ItemType = ListViewItemType.DataItem Then
Dim dataItem As Object = DirectCast(e.Item, ListViewDataItem).DataItem
...
End Sub
あなたは、あなたのバインドされたオブジェクトが何であっても型にデータ項目オブジェクトをキャストすることができます。これは、DataItemがDataBoundメソッドのイベント引数のプロパティであるリピータ作業のような他のデータバインドコントロールとは異なります。彼らはリストビューのためにこれがそう異ならなぜ
現在のアイテムに使用されているデータは、EventArgs
から見つけることができます。
したがって、RepeaterItemEventArgs e
からは、e.Item.DataItem
で現在のアイテムにアクセスできます。
protected void listView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var currentItem = e.Item.DataItem;
}
}
Georgeさんにありがとう。 –