3 Stimmen

Wie man eine verschachtelte Liste in einer Klasse im Listview anzeigen kann

Ich habe zwei Klassen erstellt - Beispiel nur für diese Frage:

public class Item
{
    public int itemId { get; set; }
    public string name { get; set; }

    public Item() { }

    public Item(int itemId, string name) 
    {
        this.itemId = itemId;
        this.name = name;
    }
}

public class GroupOfitems
{
    public string groupName { get; set; }
    public List itemList;

    public GroupOfitems()
    {
        itemList = new List();
    }

    public GroupOfitems(string groupName, List itemList)
    {
        this.groupName = groupName;
        this.itemList = itemList;
    }
}

public List TestMethod()
{
    // ADD SOME ITEMS TO FRUIT GROUP
    List bla = new List();
    bla.Add(new Item(1, "Banana"));
    bla.Add(new Item(2, "Apple"));

    // ADD SOME ITEMS TO VEGETABLES GROUP
    List bla2 = new List();
    bla2.Add(new Item(5, "Carot"));
    bla2.Add(new Item(6, "Tomato"));

    // ADD SOME ITEMS TO SOURCE
    List result = new List();
    result.Add(new GroupOfitems("Fruit", bla));
    result.Add(new GroupOfitems("Vegetables", bla2));

    // RETURN SOURCE
    return result;  
}

Und in meiner .aspx Datei habe ich ObjectDataSource und ListView wie:

Dies ist nur ein schnelles Beispiel für diese Frage. Alles funktioniert gut, aber ich kann itemList nicht wie eine DataSource an das verschachtelte ListView binden (DataSource='<%# Eval("itemList") %>') (weil itemList kein Eigenschaft in der Klasse ist). Ist dies der richtige Ansatz für das Binden oder muss ich meinen Ansatz ändern?

2voto

Carsten Punkte 10787

Das listItems-Element ist als Feld definiert, nicht als Eigenschaft, sodass die Reflektion es nicht mit GetProperties finden kann (was Datenbindung eigentlich macht).

public class GroupOfitems
{
    public string groupName { get; private set; }

    public List ItemList { get; private set; }

    public GroupOfitems()
    {
        this.ItemList = new List();
    }

    public GroupOfitems(string groupName, List itemList)
    {
        this.groupName = groupName;
        this.ItemList = itemList;
    }
}

Tatsächlich sollten Sie immer Eigenschaften verwenden, um Ihre Datenschnittstelle freizulegen. Das ist es, was mit Kapselung gemeint ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X