2010-08-19 27 views
7

Tôi đã có một chút của một vấn đề cố gắng để ràng buộc một danh sách chung chung với một bộ lặp. Loại được sử dụng trong danh sách chung thực sự là một cấu trúc.Binding a Generic Danh sách các loại struct đến một Repeater

tôi đã xây dựng một ví dụ cơ bản dưới đây:

struct Fruit 
{ 
    public string FruitName; 
    public string Price; // string for simplicity. 
} 


protected void Page_Load(object sender, EventArgs e) 
{ 

    List<Fruit> FruitList = new List<Fruit>(); 

    // create an apple and orange Fruit struct and add to List<Fruit>. 
    Fruit apple = new Fruit(); 
    apple.FruitName = "Apple"; 
    apple.Price = "3.99"; 
    FruitList.Add(apple); 

    Fruit orange = new Fruit(); 
    orange.FruitName = "Orange"; 
    orange.Price = "5.99"; 
    FruitList.Add(orange); 


    // now bind the List to the repeater: 
    repFruit.DataSource = FruitList; 
    repFruit.DataBind(); 

} 

Tôi có một cấu trúc đơn giản để mô hình trái cây, chúng tôi có hai thuộc tính đó là FruitName và Giá. Tôi bắt đầu bằng cách tạo một danh sách chung loại trống 'FruitList'.

Sau đó tôi tạo hai loại trái cây bằng cách sử dụng cấu trúc (táo và cam). Những quả này sau đó được thêm vào danh sách.

Cuối cùng, tôi ràng buộc danh sách chung đối với tài sản DataSource của repeater ...

Các đánh dấu trông như thế này:

<asp:repeater ID="repFruit" runat="server"> 
<ItemTemplate> 
    Name: <%# Eval("FruitName") %><br /> 
    Price: <%# Eval("Price") %><br /> 
    <hr /> 
</ItemTemplate> 

tôi mong đợi để xem tên trái cây và giá được in trên màn hình, được phân cách bằng quy tắc ngang.

Tại thời điểm tôi đang nhận được một lỗi liên quan đến thực tế ràng buộc ...

**Exception Details: System.Web.HttpException: DataBinding: '_Default+Fruit' does not contain a property with the name 'FruitName'.** 

Tôi thậm chí không chắc chắn nếu điều này có thể làm việc? Bất kỳ ý tưởng?

Cảm ơn

+1

ngẫu nhiên lưu ý, lớp ListView được ồ ạt thay thế các bộ lặp về mặt năng lực. –

+0

@Chris Marisic cảm ơn bạn về mẹo, tôi đang đọc về ListView bây giờ, trông thực sự tốt: http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control- part-1-building-a-product-danh sách-trang-với-clean-css-ui.aspx – Dal

Trả lời

9

Bạn cần thay đổi trường công khai thành thuộc tính công khai.

Thay đổi này: public string FruitName;

Để:

public string FruitName { get; set; } 

Nếu không, bạn có thể làm cho fruitName tin và bao gồm một tài sản công cộng cho nó.

private string fruitName; 

public string FruitName { get { return fruitName; } set { fruitName = value; } } 

Here is a link with someone who has had the same issue as you.

+0

Nó hoạt động! Thiên Chúa tôi cảm thấy soo ngu ngốc bây giờ, làm cho rất nhiều ý nghĩa, cảm ơn bạn rất nhiều !! :) – Dal

1

Lỗi sẽ cho bạn biết mọi thứ bạn cần biết. Bạn có các trường công khai không thuộc tính được định nghĩa cho FruitName và Price.

Các vấn đề liên quan