+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

Totalizzare valore celle DGV

  1. #1
    EL_CAPITAN83 non è in linea Novello
    Post
    3
    Like Inviati  
    2
    Like Ricevuti  
    0
    Buongiorno a tutti ho un piccolo problema da porvi,
    ho necessità di calcolare il fatturato raggruppato per categoria ovvero quando trovo il valore stringa ad aesempio "ACQUA" NELLA CELLA (7) somma il valore della CELLA(8) e mettimi il risultato nella textbox2.text
    e funziona benissimo il problema e' che le categorie sono 64 e la query sql tira fuori una UNION da piu di 2 milioni di record e inevitabilmente mi da OutOfMemoryError exception... ho provato con un Arrey ma non riesco a risolvere qualche consiglio?
    allego codice con variabili
    e codice con array


     Dim SommaAcqua, SommaSalumi, SommaCucina, SommCaseificio, SommaPane, SommaBar, SommaAnatra, SommaPastifici, SommaBestiame, SommacarneVitellone,
                SommaCarneBufalina, SommaVitello, SommaBovinoAdulto as decimal
    
    For X As Decimal = 0 To DataGridView1.Rows.Count - 1
                If DataGridView1.Rows(X).Cells(7).Value = "ACQUA" Then
                    SommaAcqua += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "SALUMI" Then
                    SommaSalumi += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "CUCINA" Then
                    SommaCucina += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "CASEIFICIO" Then
                    SommCaseificio += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "PANE" Then
                    SommaPane += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "LINEA BAR" Then
                    SommaBar += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "ANATRA" Then
                    SommaAnatra += (DataGridView1.Rows(X).Cells(8).Value)
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "PASTIFICI" Then
                    SommaPastifici += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "BESTIAME" Then
                    SommaBestiame += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "CARNE VITELLONE" Then
                    SommacarneVitellone += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "CARNE BUFALINA" Then
                    SommaCarneBufalina += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "VITELLO" Then
                    SommaVitello += (DataGridView1.Rows(X).Cells(8).Value)
    
                ElseIf DataGridView1.Rows(X).Cells(7).Value = "BOVINO ADULTO" Then
                    SommaBovinoAdulto += (DataGridView1.Rows(X).Cells(8).Value)
    
    
                End If
    
            Next
            TextBox2.Text = Format(CDbl(SommaAcqua.ToString), "#,##0.00")
            TextBox5.Text = Format(CDbl(SommaSalumi.ToString), "#,##0.00")
            TextBox30.Text = Format(CDbl(SommaCucina.ToString), "#,##0.00")
            TextBox9.Text = Format(CDbl(SommaCaseificio.ToString), "#,##0.00")
            TextBox16.Text = Format(CDbl(SommaPane.ToString), "#,##0.00")
            TextBox29.Text = Format(CDbl(SommaBar.ToString), "#,##0.00")
    TextBox12.Text = Format(CDbl(SommaAnatra.ToString), "#,##0.00")
    TextBox28.Text = Format(CDbl(SommaPastifici.ToString), "#,##0.00")
    TextBox31.Text = Format(CDbl(SommaBestiame.ToString), "#,##0.00")
    TextBox35.Text = Format(CDbl(SommaCarneVitellone.ToString), "#,##0.00")
    TextBox39.Text = Format(CDbl(SommaCarneBufalina.ToString), "#,##0.00")
    TextBox45.Text = Format(CDbl(SommaCarneVitello.ToString), "#,##0.00")
    TextBox44.Text = Format(CDbl(SommaBovinoAdulto.ToString), "#,##0.00")
    
    \\'CODICE ARRAY

       
    Dim categoria(2) As String
            categoria(0) = "ACQUA"
            categoria(1) = "SALUMI"
            categoria(2) = "CUCINA"
    
            For test As Integer = 0 To 2
                ' If Not DBNull.Value.Equals(DataGridView1.Item(test, categoria).Value) Then
                'somma(test - 2) += CType(DataGridView1.Item(test, categoria).Value.integer)
                If DataGridView1.Rows(test).Cells(7).Value = "acqua" Then
                    categoria(test) += (DataGridView1.Rows(test).Cells(8).Value)
                End If
                If DataGridView1.Rows(test).Cells(7).Value = "salumi" Then
                    categoria(test) += (DataGridView1.Rows(test).Cells(8).Value)
                End If
                If DataGridView1.Rows(test).Cells(7).Value = "cucina" Then
                    categoria(test) += (DataGridView1.Rows(test).Cells(8).Value)
                End If
            Next
                TextBox2.Text = Format(CDbl(categoria(0).ToString), "#,##0.00")
                TextBox3.Text = Format(CDbl(categoria(1).ToString), "#,##0.00")
                TextBox4.Text = Format(CDbl(categoria(2).ToString), "#,##0.00")
    

  2. #2
    Ferrari_and non è in linea Scolaretto
    Post
    294
    Like Inviati  
    2
    Like Ricevuti  
    3
    Prova a vedere se è possibile creare una query già con i risultati pronti cerca GROUP BY (istruzione sql per raggruppare i dati in base a categorie).

  3. #3
    EL_CAPITAN83 non è in linea Novello
    Post
    3
    Like Inviati  
    2
    Like Ricevuti  
    0
    Lo scenario e questo:


  4. #4
    L'avatar di SirJo
    SirJo non è in linea Scolaretto
    Post
    50
    Like Inviati  
    5
    Like Ricevuti  
    2
    Non ho capito se il problema è nella query o nello scorrere la DGV

    Innanzitutto, come ti hanno già detto, dovresti ottimizzare la query vedendo se già da quella puoi far calcolare i totali.

    Se non ce la fai, devi per forza scorrere la DGV e calcolare i totali, ma c'è un sistema molto molto più semplice di come fai tu, e cioè devi utilizzare un Dictionary(Of String, Double).
    Quando scorri la DGV, ti ricavi la categoria, ad esempio ACQUA, controlli se nel Dictionary c'è già ACQUA, se non c'è la crei, e poi aggiungi il valore relativo.
    Nella Dictionary si creeranno quindi 64 chiavi con i relativi totali.
    In 4 righe fai tutto
    Se poi le Label che vedo sulla Form hanno un nome "intelligente", con altre 4 righe assegni i totali alle Label senza diventar matto.

    P.S.: orribile quella serie di ElseIf che hai messo, se il confronto deve essere fatto sempre con la stessa variabile meglio utilizzare un Select Case

    P.S.2: orribile anche quel Format(CDbl(SommaAcqua.ToString), "#,##0.00")
    devi scriverlo così: SommaAcqua.ToString("#,##0.00")

  5. #5
    EL_CAPITAN83 non è in linea Novello
    Post
    3
    Like Inviati  
    2
    Like Ricevuti  
    0
    grazie mille per la risposta ora provo come mi hai indicato te

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. If per modifica valore celle
    Da jason84 nel forum Microsoft Excel
    Risposte: 4
    Ultimo Post: 07-09-2015, 17:14
  2. Valore celle da ComboBox
    Da Guybrush1978 nel forum Microsoft Excel
    Risposte: 1
    Ultimo Post: 20-08-2014, 15:22
  3. spostare valore tra celle di colonna
    Da anadin nel forum Microsoft Excel
    Risposte: 6
    Ultimo Post: 03-04-2014, 12:37
  4. Concatenare 2 celle con valore + cella testo
    Da datalife nel forum Microsoft Excel
    Risposte: 4
    Ultimo Post: 17-02-2013, 10:25
  5. Attribuire un valore a più celle
    Da Carmen G. nel forum Microsoft Word
    Risposte: 3
    Ultimo Post: 31-03-2011, 16:52