2009-05-13 10 views

Odpowiedz

19

C# Rozwiązanie

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; 
    } 
} 

Dlaczego zrobili to tak różny dla ListView nadal jakby mnie zastanawia. Musi być jednak jakiś powód.

+0

Dzięki za poprawkę George. –

1

Znaleziono obejście, stworzyłem metodę formatowania danych jak ja potrzebne i nazwał go z użyciem znaczników:

<%# doFormatting(Convert.ToInt32(Eval("Points")))%> 
+1

Podoba mi się to rozwiązanie lepiej niż przy złapaniu go na zdarzeniu ItemDataBound. Jedyną sugestią jest to, że w twojej metodzie 'doFormatowania' powinieneś sprawdzić' null' lub 'DBNull' –

3

trochę późno, ale postaram się odpowiedzieć na pytanie, jak miał ten sam problem i znalazł rozwiązanie. Trzeba oddać własność pozycjach ListViewItemEventArgs do ListViewDataItem, a następnie można uzyskać dostęp do właściwości DataItem tego obiektu, na przykład:

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 

Następnie można rzutować obiektu dataItem do jakiegokolwiek rodzaju swoją granicę celem było. Różni się to od tego, jak inne formanty databoundów, takie jak praca repeatera, gdzie DataItem jest właściwością w argumencie zdarzenia dla metody DataBound.

0

Dane używane dla bieżącego przedmiotu można znaleźć na stronie EventArgs.

Tak więc od RepeaterItemEventArgs e możemy uzyskać dostęp do bieżącego przedmiotu, patrząc w e.Item.DataItem.

protected void listView_ItemDataBound(object sender, ListViewItemEventArgs e) 
{   
    if (e.Item.ItemType == ListViewItemType.DataItem) 
    { 
     var currentItem = e.Item.DataItem; 
    } 
} 
Powiązane problemy