【问题标题】:ASP.Net Gridview -> How to show collection of data inside one row of the GrdiView?ASP.Net Gridview -> 如何在 GrdiView 的一行中显示数据集合?
【发布时间】:2010-10-25 00:40:36
【问题描述】:
     I have a scenario where I will be showing a Customer data in a GridView. I have a Dictionary collection like this IDictionary<Customer, IList<CustomerOrder>>. 

第一个问题我可以将此字典绑定到 ASP.Net GridView 吗?

现在下一个问题,我想展示以下类型的用户界面,即在客户的一行中显示多个客户订单。

FName LastName OrderNumber MarkOrderCompleted(RadioButton) ABC DEF 123 单选按钮 是 否 345 单选按钮 是 否 678 单选按钮 是 否 GHI JKL 213 单选按钮 是 否 546 单选按钮 是 否 768 单选按钮 是 否

FName 和 LastName 将从 Dictionary 中的 Customer 对象填充,而 OrderNumber 和 MarkOrderCompleted 将从 CustomerOrders 填充。 下面是一个提交按钮,它根据订单将单选按钮状态值保存到数据库中。 立即提供帮助将不胜感激。提前谢谢...

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您是否必须在同一个字典中同时包含 Customer 和 CustomerOrder?我会使用具有两个不同集合的嵌套网格。嵌套网格使用第一个网格的“DataKeyNames”属性作为参数。示例:

    网格:

       <asp:GridView ID="CustomerGrid" runat="server" EnableModelValidation="True" 
            onrowdatabound="CustomerGrid_RowDataBound" DataKeyNames="CustomerId">
            <Columns>
                <asp:TemplateField HeaderText="Orders">
                    <ItemTemplate>
                        <asp:GridView ID="OrderGrid" runat="server">
                        </asp:GridView>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    

    后面的代码:

        List<Customer> CustomerList = new List<Customer>();
        List<Orders> Orders = new List<Orders>();
    
        protected void Page_Load(object sender, EventArgs e)
        {
            // Add some customers
            CustomerList.Add(new Customer() { CustomerId = 1, CompanyName = "TestCompany", FirstName = "John", LastName = "West" });
            CustomerList.Add(new Customer() { CustomerId = 2, CompanyName = "AnotherCompany", FirstName = "Alan", LastName = "East" });
    
            // Add some orders
            Orders.Add(new Orders() { CustomerId = 1, OrderId = 1, OrderDate = DateTime.Now, Sum = 300 });
            Orders.Add(new Orders() { CustomerId = 1, OrderId = 2, OrderDate = DateTime.Now, Sum = 600 });
            Orders.Add(new Orders() { CustomerId = 2, OrderId = 3, OrderDate = DateTime.Now, Sum = 2000 });
            Orders.Add(new Orders() { CustomerId = 2, OrderId = 4, OrderDate = DateTime.Now, Sum = 100 });
    
            // Bind customerlist to grid
            CustomerGrid.DataSource = CustomerList;
            CustomerGrid.DataBind();
        }
    
        protected void CustomerGrid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Get customer id for row
                int customerId = (int)CustomerGrid.DataKeys[e.Row.RowIndex].Value;
    
                // Get the nested grid control
                GridView OrderGrid = e.Row.FindControl("OrderGrid") as GridView;
    
                // Get orders for customer
                OrderGrid.DataSource = Orders.Where(o => o.CustomerId == customerId);
                OrderGrid.DataBind();
            }
        }
    

    【讨论】:

    • 一件事我有人可以提供帮助。如果我在 innerGridView 中有多个列,并且必须与父 GridView 的 HeaderText 匹配,该怎么办。如何做到这一点?
    • 我在理解您想要实现的目标时遇到了一些问题。你能举个实际的例子吗?
    • 我得到了需要编写标题列单独样式的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2017-10-16
    相关资源
    最近更新 更多