2017-10-05 145 views
0

這可能甚至是不可能的,但我有一個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(); 

回答

0

假設你的第一臺至少有兩個字段:訂單和項目:

首先,查詢會給你的項目有兩個字段可枚舉 - 產品和訂單的數量。然後,如果您想將它作爲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

0

得到這個工作的偉大工程...感謝大家:

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, "", ""); 
     }