2009-05-13 28 views

Trả lời

19

C# Giải pháp

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

Tại sao họ làm này rất khác nhau cho ListView vẫn loại câu đố tôi. Tuy nhiên, phải có một lý do.

+0

Cảm ơn George đã sửa lỗi. –

1

Tìm thấy một workaround, tôi đã tạo ra một phương pháp để định dạng dữ liệu như thế nào tôi cần và gọi nó là từ ngữ đánh dấu sử dụng:

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

Tôi thích giải pháp này tốt hơn là bắt nó trên sự kiện ItemDataBound. Đề nghị duy nhất là trong phương thức 'doFormatting' của bạn, bạn nên kiểm tra' null' hoặc 'DBNull' –

3

Một chút trễ, nhưng tôi sẽ cố gắng trả lời câu hỏi của bạn, như tôi đã có cùng một vấn đề và tìm thấy một giải pháp. Bạn phải bỏ mục tài sản của ListViewItemEventArgs đến một ListViewDataItem, và sau đó bạn có thể truy cập vào các tài sản DataItem của đối tượng đó, như thế này:

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 

Sau đó, bạn có thể cast đối tượng DataItem để bất cứ loại đối tượng ràng buộc của bạn là gì. Điều này khác với cách các điều khiển databound khác như công việc lặp lại, nơi mà DataItem là một thuộc tính trên sự kiện args cho phương thức DataBound.

0

Dữ liệu được sử dụng cho mục hiện tại có thể được tìm thấy từ EventArgs.

Vì vậy, từ RepeaterItemEventArgs e chúng tôi có thể truy cập mục hiện tại bằng cách xem trong e.Item.DataItem.

protected void listView_ItemDataBound(object sender, ListViewItemEventArgs e) 
{   
    if (e.Item.ItemType == ListViewItemType.DataItem) 
    { 
     var currentItem = e.Item.DataItem; 
    } 
} 
Các vấn đề liên quan