2010-08-19 4 views
7

J'ai eu un peu de mal à essayer de lier une liste générique à un répéteur. Le type utilisé dans la liste générique est en fait une structure.Liaison d'une liste générique de type struct à un répéteur

J'ai construit un exemple de base ci-dessous:

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

} 

J'ai un struct simple modèle de fruits, nous avons deux propriétés qui sont FruitName et le prix. Je commence par créer une liste générique vide de type 'FruitList'. Je crée ensuite deux fruits en utilisant la structure (pomme et orange). Ces fruits sont ensuite ajoutés à la liste.

Enfin, je lie la liste générique à la propriété DataSource du répéteur ...

Le balisage ressemble à ceci:

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

-je voir le nom de fruits et prix imprimé sur l'écran, séparé par une règle horizontale.

Au moment où je reçois une erreur relative à la liaison réelle ...

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

Je ne suis même pas sûr si cela peut fonctionner? Des idées?

Merci

+1

Note aléatoire, la classe ListView est annule et remplace massivement le répéteur en termes de capacité. –

+0

@Chris Marisic merci pour le conseil, je lis sur le ListView maintenant, l'air vraiment bien: http://weblogs.asp.net/scottgu/archive/2007/08/10/10the-asp-listview-control- partie-1-construction-a-product-listing-page-avec-clean-css-ui.aspx – Dal

Répondre

9

Vous devez remplacer votre champ public par une propriété publique.

Modifier ceci: public string FruitName;

Pour:

public string FruitName { get; set; } 

Sinon, vous pourriez faire privé et inclure fruitName une propriété publique pour elle.

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

Ça a marché! Dieu je me sens tellement stupide maintenant, fait beaucoup de sens, merci beaucoup !! :) – Dal

1

Erreur vous indiquant tout ce que vous devez savoir. Vous avez des champs publics et non des propriétés définies pour FruitName et Price.

Questions connexes