使用数据来填充的GridView 2

问题描述:

这可能甚至是不可能的,但我有一个gridivew对于示例数据是:使用数据来填充的GridView 2

enter image description here

我想,然后填充第二个GridView控件显示项目,该项目的订单,像这样:

enter image description here

这甚至可能吗?想过要做一个像这样的FOREACH循环,但不知道我会如何按项目分组#然后为该项目的每个订单做一个i ++?

DataTable dtProducts = new DataTable(); 

    // Items for the product Gridview 
    foreach (GridViewRow row in ordersGridView.Rows) 
    { 
     var products = from orderRow in dt.AsEnumerable() 
         group orderRow["orderNo"] by orderRow["itemNo"] into grp 
         select new { product = grp.Key, orders = grp.Count() }; 

     dt.Rows.Clear(); 
     foreach (var prod in products) 
     { 
      DataRow r = dtProducts.NewRow(); 
      r["PRODUCTS"] = prod.product; 
      r["ORDERS"] = prod.orders; 
      dtProducts.Rows.Add(r); 
     } 
    } 

    productGridView.DataSource = dtProducts; 
    productGridView.DataBind(); 

假设你的第一台至少有两个字段:订单和项目:

首先,查询会给你的项目有两个字段可枚举 - 产品和订单的数量。然后,如果您想将它作为DataTable,则可以遍历查询结果。

var products = from orderRow in dtOrders.AsEnumerable() 
    group orderRow["ORDERID"] by orderRow["ITEM"] into grp 
    select new { product = grp.Key, orders = grp.Count() }; 

dtProducts.Rows.Clear(); 
foreach (var prod in products) 
{ 
    DataRow r = dtProducts.NewRow(); 
    r["PRODUCTS"] = prod.product; 
    r["ORDERS"] = prod.orders; 
    dtProducts.Rows.Add(r); 
} 

我认为这是可能的这两个步骤合并,但这应该让你开始至少:)

+0

我上面更新了我的代码..这就是我正在使用的,当我运行它时,dtProducts Gridview中什么也没有显示? – ksuProgrammer

+0

不需要将该东西放入该foreach循环中。它会给你整个清单,每个产品1个对象,包含产品名称和订单数量。 DataGridView是基于一个表,对吧?你问题中第一张表格的基础。回答假设您的代码中的这个表名为dtOrders。并且它具有包含“CAR1”,“HAMMER”等的列“ORDERID”(保存1,2,3)和名为“ITEM”的列。如果表名或列​​名不同,在我的答案中替换这些名字。然后查看dtProducts表是否按预期填充。 –

+0

是否有可能根据两个不同的字段进行分组,或基于这两个不同的字段进行计数? – ksuProgrammer

得到这个工作的伟大工程...感谢大家:

var result = from row in dt.AsEnumerable() 
        group row["orderNo"] by row["itemNo"] into grp 
        select new 
        { 
         itemNum = grp.Key, 
         orders = grp.Count() 
        }; 
     foreach (var t in result) 
     { 
      dtProducts.Rows.Add(t.itemNum, t.orders, "", ""); 
     }