2013-02-08 15 views
5

Ho due moduli Form1(DGV1 & DGV2) e Form2(DGV3 & DGV4) con controlli Datagridview su entrambi i moduli.Ottieni Somma della colonna DataGridView utilizzando Linq per un ID distinto

Su Form1 c'è un collegamento pulsante a Form2 dove l'utente può aggiungere righe a Form1datagridview(DGV1). In Form2 → (DGV3 and DGV4), c'è un checkbox nella prima colonna e l'utente può selezionare solo una riga alla volta.

Ci sono due pulsanti sul Form2: Done e Add Items

Quando l'utente fa clic su Aggiungi Articoli selezionando il file uno dopo l'altro, le file deve essere aggiunto il datagridview su Form1 e quando il pulsante Done viene cliccato, Form1 dovrebbe essere visualizzato con tutte le righe che vengono aggiunte.

Ho raggiunto questo.

Le colonne DGV1 e DGV2 sono

Colonne DGV1 Colonne

Sno Desciption SellQty ItemID 
---------------------------- 
1 ABC  0   1 
2 XYZ  0   2 

DGV2

Sno BatchNo SellQty ItemID 
---------------------------- 
1 123  10   1 
2 528  20   2 
1 568  30   1 
2 522  40   2 

Durante il caricamento del Form1, come posso ottenere la somma di SellQty secondo ItemID per Form → DGv2 e aggiornare il valore di SellQty in DGV1.

Esempio: For ItemID=1 sum(SellQty)=40

quindi necessario assegnare questo valore a DGV1 SellQty Column=40.

Si prega di consulenza.

risposta

6

seguito vi darà la quantità totale per ItemID == 1-(assicuratevi di utilizzare i nomi delle colonne corretti per il datagrid)

int total = DGV1.Rows.Cast<DataGridViewRow>() 
        .Where(r=> Convert.ToInt32(r.Cells["ItemID"].Value) == 1) 
        .Sum(t=> Convert.ToInt32(t.Cells["SellQty"].Value)); 

EDIT:

Per l'aggiornamento della griglia è possibile eseguire:

for (int i = 0; i < DGV1.Rows.Count; i++) 
{ 
    if (Convert.ToInt32(DGV1.Rows[i].Cells["ItemID"].Value) == 1) 
     DGV1.Rows[i].Cells["SellQty"] = total; 
} 
+0

Ciao ... Sto ottenendo la somma per un particolare ID eseguendo il looping attraverso gridview e usando l'oggetto datatable Value = dtBatchSellQty.Compute ("Sum (SellQty)", "BatchItemID = '" + ItemID.ToString() + "'"); sum = Convert.ToInt32 (Value); La mia domanda Come assegnare questo valore alla colonna SellQty della cella DGV1 dove ItemID = 1 – Prathap

+0

@ user2002785, È possibile iterare le righe GridView e impostare 'SellQty' sul totale, ma credo che la tua domanda per ottenere il totale utilizzando LINQ – Habib

+0

Sì Habib ... ho usato Linq ora .. per ottenere la somma.Ma non ho capito come impostare il valore..come abbiamo bisogno del rowIndex della riga dove l'ItemId corrisponde a – Prathap

1

Penso che questo codice forse usfull

Textbox.Text = (from dr in MyDataSet.MyTable.AsEnumerable() 
       where !dr.IsCR_TRANSFER_AMTNull() 
       select dr.CR_TRANSFER_AMTNull).Sum().ToString(); 
+0

Ciao ... io sono sempre la somma per un particolare ID da loop attraverso GridView e utilizzando DataTable valore oggetto = dtBatchSellQty.Compute ("Sum (SellQty) "," BatchItemID = '"+ ItemID.ToString() +"' "); sum = Convert.ToInt32 (Value); La mia domanda Come assegnare questo valore alla colonna SellQty della cella DGV1 dove ItemID = 1 – Prathap

0

Un'altra versione di LINQ dall'idea di Mr. Habib

var total = DGV1.Rows.Cast<DataGridViewRow>() 
      .Where(c => int.Parse(c.Cells[IndeOfItemId].EditedFormattedValue.ToString()) == 1) 
      .Sum(x => int.Parse(x.Cells[IndexOfSellQty].EditedFormattedValue.ToString())); 
+1

Ciao Spajce ... Ci vediamo di nuovo ... Il problema è come assegnare questo valore alla cella SellQty di DGV1 dove ItemId = 1 o 2 o 3 – Prathap