2010-08-19 13 views
7

Ich hatte ein kleines Problem beim Versuch, eine generische Liste an einen Repeater zu binden. Der in der generischen Liste verwendete Typ ist eigentlich eine Struktur.Binden einer generischen Liste vom Typ struct an einen Repeater

ich ein einfaches Beispiel unten aufgebaut haben:

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(); 

} 

ich eine einfache Struktur haben Obst zu modellieren, wir haben zwei Eigenschaften, die FruitName und Preis sind. Ich beginne damit, eine leere generische Liste vom Typ 'FruitList' zu erstellen.

Ich erstelle dann zwei Früchte mit der Struktur (Apfel und Orange). Diese Früchte werden dann zu der Liste hinzugefügt.

Schließlich binde ich die generische Liste an die Datasource-Eigenschaft des Repeaters ...

Das Markup wie folgt aussieht:

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

Ich erwarte, dass die Frucht Namen sehen und Preis gedruckt auf dem Bildschirm, getrennt durch eine horizontale Regel.

Im Moment habe ich einen Fehler bin immer in Bezug auf tatsächliche Bindung ...

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

Ich bin nicht einmal sicher, ob das funktionieren kann? Irgendwelche Ideen?

Danke

+1

Zufall Notiz wird die Listview-Klasse ersetzt massiv den Repeater in Bezug auf die Fähigkeit. –

+0

@Chris Marisic danke für den Tipp, ich lese jetzt über die ListView, sieht wirklich gut aus: http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control- Teil-1-Gebäude-ein-Produkt-Listing-Seite-mit-clean-css-ui.aspx – Dal

Antwort

9

Sie müssen Ihr öffentliches Feld in eine öffentliche Eigenschaft ändern. diese

Wechsel: public string FruitName;

An:

public string FruitName { get; set; } 

Sonst könnte man fruitName privat und verfügen über ein öffentliches Eigentum dafür.

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

Es hat funktioniert! Gott, ich fühle mich jetzt so dumm, macht viel Sinn, vielen Dank !! :) – Dal

1

Fehler sagt Ihnen alles, was Sie wissen müssen. Sie haben öffentliche Felder, die nicht für FruitName und Price definiert sind.

Verwandte Themen