2013-04-11 71 views
3

我做了兩個類顯示類嵌套列表 - 例如只有一個問題:如何在列表視圖

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<Item> itemList; 

    public GroupOfitems() 
    { 
     itemList = new List<Item>(); 
    } 

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

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

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

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

    // RETURN SOURCE 
    return result; 
} 

而在我的.aspx文件中我有ObjectDataSourceListView,如:

<asp:ObjectDataSource ID="odsRecipesIngredientListTest" runat="server" 
    SelectMethod="TestMethod" TypeName="MyRepository">    
</asp:ObjectDataSource> 

<asp:ListView ID="lvRecipeIngredients" runat="server" 
    DataSourceID="odsRecipesIngredientListTest" 
    ItemPlaceholderID="itemPlaceHolderId"> 
    <LayoutTemplate> 
     <asp:PlaceHolder id="itemPlaceHolderId" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <asp:Label ID="lblGroupName" Text='<%# Eval("groupName") %>' runat="server" /><br /> 

     <asp:ListView ID="lvIngredientList" runat="server" 
      DataSource='<%# Eval("itemList") %>' 
      ItemPlaceholderID="itemPlaceHolderId"> 
      <LayoutTemplate> 
       <asp:PlaceHolder id="itemPlaceHolderId" runat="server" /> 
      </LayoutTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label4" Text='<%# Eval("itemId") %>' runat="server" /> 
       <asp:Label ID="Label16" Text='<%# Eval("name") %>' runat="server" /> 
      </ItemTemplate> 
     </asp:ListView> 
    </ItemTemplate> 
</asp:ListView> 

這是這個問題的一個非常快速的例子。 Eveything正常工作,但我不能將itemList綁定爲DataSource嵌套ListViewDataSource='<%# Eval("itemList") %>')(因爲itemList不是類中的屬性)。這是綁定的正確方法,還是我需要改變我的方法?

+0

你有沒有試過嵌套中繼器控制? – Yahya 2013-04-11 10:30:28

+0

我不認爲嵌套的listview是一個問題。我會嘗試它,但我認爲DataSource像列表 itemList列表是不正確的...我會嘗試與中繼器,並在這裏給它一個評論 – janilemy 2013-04-11 10:32:51

+0

就像我說的,同樣的錯誤 - DataBinding:MyRepository .. 。datasource GRoupOfItems不包含名爲itemList的屬性...它綁定groupName屬性就像它應該但無法找到itemlist屬性,因爲它不屬性... – janilemy 2013-04-11 10:34:57

回答

2

listItems構件被定義爲字段,而不是作爲屬性,防止反射找到它使用GetProperties(這是什麼數據綁定實際執行)。

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

    public List<Item> ItemList { get; private set; } 

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

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

實際上,您應該總是使用屬性來公開您的數據接口。這就是encapsulation的含義。