Gridview - привязка коллекции к коллекции - PullRequest
1 голос
/ 26 мая 2011
Class Section
    List<Group> groupList

Class Group
   List<Products> productList
   Group ID
   Group Name

Class Product
   Product ID
   Product Name
   Product Details

Использование C #, .NET 4.0, Как мне связать эти данные с GridView, чтобы у меня был этот формат

G1_Name
       P1_Name   P1_Details
       P2_Name   P2_Details
G2_Name
       P3_Name   P3_Details
       P4_Name   P4_Details

Спасибо

Ответы [ 2 ]

1 голос
/ 30 мая 2012

Одно решение (из многих возможных):

  • GridView, который представляет собой данные, привязанные к списку групп

  • с TemplateField, которыйсодержит элемент управления списком с привязкой к данным (например, Repeater, DataList или другой GridView).

  • , где свойство DataSource элемента управления с привязкой к данным связано сСвойство Group.ProductList:

.

<asp:GridView ...>
    <Columns>
        <asp:TemplateField ...>
            <ItemTemplate>
                <asp:Repeater ... DataSource='<%# Eval("ProductList")) %>'>
                    <ItemTemplate>
                         ... controls bound to Product properties
                     </ItemTemplate>
                 </asp:Repeater>
             </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
0 голосов
/ 26 мая 2011

Похоже, вы пытаетесь связать иерархическую коллекцию.Из того, что вы описываете, я бы рекомендовал использовать ListView вместо GridView.Вы получите намного больше контроля и гибкости при отображении ваших данных.Однако выбор за вами, и приведенный ниже код может быть легко изменен для использования в GridView.

Код создаст следующую структуру:

enter image description here

ASPX

<asp:ListView runat="server" ID="listView">
        <LayoutTemplate>
            <ul><asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder></ul>
        </LayoutTemplate>
        <ItemTemplate>
            <li><%# Eval("GroupName") %>
                <asp:ListView runat="server" DataSource='<%# Eval("productList")%>'>
                    <LayoutTemplate>
                        <ul><asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder></ul>
                    </LayoutTemplate>
                    <ItemTemplate>
                        <li><%# Eval("ProductName") %> - Details: <%# Eval("ProductDetails") %></li>
                    </ItemTemplate>
                </asp:ListView>
            </li>
        </ItemTemplate>
    </asp:ListView>

C #

        public class Section
        {
            public List<Group> groupList { get; set; }
        }

        public class Group
        {
            public List<Product> productList { get; set; }
            public int GroupID { get; set; }
            public string GroupName { get; set; }
        }

        public class Product
        {
            public int ProductID { get; set; }
            public string ProductName { get; set; }
            public string ProductDetails { get; set; }
        }

        Section section = new Section { groupList = new List<Group>() };

        Group group = new Group { GroupID = 1, GroupName = "Fruits", productList = new List<Product>() };
        Product product = new Product { ProductID = 1, ProductName = "Apples", ProductDetails = "On Sale" };
        group.productList.Add(product);
        product = new Product { ProductID = 2, ProductName = "Oranges", ProductDetails = "Not on Sale" };
        group.productList.Add(product);
        product = new Product { ProductID = 3, ProductName = "Pears", ProductDetails = "Big Spender Sale" };
        group.productList.Add(product);
        product = new Product { ProductID = 4, ProductName = "Grapes", ProductDetails = "Not on Sale" };
        group.productList.Add(product);

        section.groupList.Add(group);

        group = new Group { GroupID = 2, GroupName = "Vegetables", productList = new List<Product>() };
        product = new Product { ProductID = 5, ProductName = "Carrots", ProductDetails = "Not on Sale" };
        group.productList.Add(product);
        product = new Product { ProductID = 6, ProductName = "Celery", ProductDetails = "Last week only" };
        group.productList.Add(product);
        product = new Product { ProductID = 7, ProductName = "Eggplant", ProductDetails = "Big Spender Sale" };
        group.productList.Add(product);
        product = new Product { ProductID = 8, ProductName = "Oniones", ProductDetails = "N/A" };
        group.productList.Add(product);

        section.groupList.Add(group);

        group = new Group { GroupID = 3, GroupName = "Meat", productList = new List<Product>() };
        product = new Product { ProductID = 9, ProductName = "Beef", ProductDetails = "On Sale" };
        group.productList.Add(product);
        product = new Product { ProductID = 10, ProductName = "Pork", ProductDetails = "Back for two weeks" };
        group.productList.Add(product);
        product = new Product { ProductID = 11, ProductName = "Chicken", ProductDetails = "On sale" };
        group.productList.Add(product);
        product = new Product { ProductID = 12, ProductName = "Turkey", ProductDetails = "Going fast" };
        group.productList.Add(product);

        section.groupList.Add(group);

        listView.DataSource = section.groupList;
        listView.DataBind();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...