2017-10-05 1 views
0

Cela peut ne pas être encore possible, mais j'ai un gridivew que par exemple des données est:Utiliser les données de Gridview 1 pour remplir Gridview 2

enter image description here

Je veux remplir puis une deuxième gridview qui montre un objet et commandes de cet élément comme ceci:

enter image description here

Est-ce même possible? Je pensais à faire une boucle FOREACH comme celle-ci, mais je ne sais pas comment je pourrais regrouper par item #, puis faire un i ++ pour chaque commande de cet item?

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(); 

Répondre

0

En supposant que le premier tableau de la vôtre a au moins deux domaines: ORDERID et ITEM:

En premier lieu, la requête vous donnera un dénombrable d'articles avec deux champs - produit et le nombre de commandes. Ensuite, si vous voulez que DataTable, vous pouvez simplement faire une boucle sur le résultat de la requête.

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

je pense qu'il est possible de combiner ces deux étapes, mais cela devrait vous aider à démarrer au moins :)

+0

J'ai mis à jour mon code ci-dessus .. c'est ce que j'utilise et il ne montre rien dans le Gridview dtProducts quand je l'exécute? – ksuProgrammer

+0

Pas besoin de mettre cette chose dans cette boucle foreach. Il vous donnera une liste complète, 1 objet pour chaque produit, contenant le nom du produit et le nombre de commandes. Que DataGridView est basé sur une table, non? La base de cette première table dans votre question. La réponse a supposé que cette table dans votre code s'appelle dtOrders. Et qu'il a des colonnes "ORDERID" (celle qui contient 1, 2, 3 ..) et une colonne nommée "ITEM", qui contient "CAR1", "HAMMER", etc. Si le nom de la table ou les noms des colonnes sont différents , remplacez ces noms dans ma réponse. Ensuite, vérifiez si la table dtProducts est remplie, comme prévu. –

+0

Est-il possible de faire un regroupement par deux champs différents ou un comptage de deux champs différents en fonction de ce seul élément? – ksuProgrammer

0

Got cela fonctionne et fonctionne très bien ... merci à tous:

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