Calcolare totali in un DataGridView in Visual Studio 2005

domenica 30 marzo 2008 - 13.52

Mau67 Profilo | Expert

Salve a tutti, ho la necessità di trovare i totali dei giorni mesi e anni inseriti in un DataGridView, come ho fatto nell'esempio che allego in access che ho progettato e che non riesco a tradurlo in Visual Studio 2005.
Spero che qualcuno mi aiuti è un pò urgente grazie
Mau67

SSUPERPIPPO Profilo | Guru

Devi intercettare l'evento CellValidated e implementare una funzione che sommi tutte le righe presenti nel DataGridView.
Di seguito un esempio:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

Mau67 Profilo | Expert

Grazie per la risposta proverò ti farò sapere
Ciao
Mau67

Mau67 Profilo | Expert

Ho scritto il codice da te suggerito te lo scrivo di seguito

Private Sub RicalcolaTotali()

' Dichiari una variabile di tipo double che memorizzerà il totale

Dim DblTotale As Double

' Cicli tutte le righe e sommi il valore della colonna che ti interessa

For Each CurRow As DataGridView In Me.ServiziDataGridView
If IsNumeric(CurRow.Cells("DataGridViewTextBoxColumn8").Value) Then
DblTotale += CurRow.Cells("DataGridViewTextBoxColumn8").Value
End If
Next

' Visualizzi il risultato nella textbox

Me.GiornoNuTextBox.Text = DblTotale

End Sub

Dove dice For Each CurRow As DataGridView In Me.ServiziDataGridView mi sottolinea in blu

Me.ServiziDataGridView (è il nome del mio datagrid) generando il seguente errore

Errore 5 L'espressione è di tipo "System.Windows.Forms.DataGridView", che non è un tipo insieme.

dove sbaglio?

Mau67

SSUPERPIPPO Profilo | Guru

L'insieme che devi ciclare è DataGridViewRow e non DataGridView per cui (se guardi il codice che ti avevo postato è corretto), la sintassi giusta è:

For Each CurRow As DataGridViewRow in Me.ServiziDataGridView

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

Mau67 Profilo | Expert

L'errore rimane ti allego il file per farti vedere che tipo di errore che mi da.

Ciao e grazie
Mau67

SSUPERPIPPO Profilo | Guru

Mea culpa...

La sintassi corretta è:

For Each CurRow As DataGridViewRow In Me.TuoDataGridView.Rows

Scusami, ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

Mau67 Profilo | Expert

OK FUNZIONA GRAZIE

IL PROBLEMA E' CHE I TOTALI CHE MI GENERA NON SONO QUELLI CHE MI ASPETTAVO! MI SPIEGO SE RIGUERDI ATTENTAMENTE IL PRIMO ALLEGATO IN ACCESS CHE TI HO MANDATO NOTERAI CHE I TOTALI CHE GLI FACCIO CALCOLARE SONO DEI TOTALI IN GIORNI, MESI E ANNI.

CIOE' SIGNIFICA CHE OGNI 30 GIORNI E' UGUALE A 1 MESE E OGNI 12 MESI SONO UGUALI A 1 ANNO.

IN DEFINITIVA IL PROGRAMMA MI DEVE CALCOLARE I TOTALI DELLE RISULTANZE IN ANNI MESI E GIORNI CREDI SI POSSA FARE?

SPERO DI SI E SPERO CHE HAI LA SOLUZIONE CIAO E GRAZIE
Mau67

SSUPERPIPPO Profilo | Guru

Sinceramente non vedo il problema!

Nel tuo caso avrai tre colonne nel DataGridView, una per gli anni, una per i mesi e una per i giorni.

Basta che modifichi il ciclo che ti ho mostrato prima che poniamo sommasse gli anni, aggiungendo due variabili, una per i mesi e una per i giorni che andranno a sommare ciclicamente i valori delle relative colonne.

Per completare correttamente le textbox con i totali basterà che, ottenuto il totale giorni li dividi per 30 per ottenere il totale mesi (il resto dovrai sommarlo alla textbox del totale giorni), i mesi ottenuti li andrai a sommare nella textbox mesi e dividendone il totale per 12 otterrai gli anni (il resto rimarrà memorizzato nella textbox degli anni).

Se ci ragioni un pò su vedrai che ci arrivi da solo ..., diversamente fammi sapere.

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

Mau67 Profilo | Expert

Scusami ma non riesco puoi darmi una mano te ne sarei grato.

Ciao grazie
Mau67

Mau67 Profilo | Expert

HO FATTO QUESTO I GIORNI LI CALCOLA ESATTAMENTE MENTRE MESI E ANNI MI DA UN RISULTATO CON LA VIRGOLA E CON UN SEGNO MENO TI POSTO IL CODICE DOVE STO' SBAGLIANDO?

Private Sub RicalcolaTotali()

' Dichiari una variabile di tipo double che memorizzerà il totale

Dim DblTotaleGiorniNU As Double
Dim DblTotaleMesiNU As Double
Dim DblTotaleAnniNU As Double

' Ciclo tutte le righe e sommo il valore della colonna Giorni non utili

For Each CurRow As DataGridViewRow In Me.ServiziDataGridView.Rows
If IsNumeric(CurRow.Cells("DataGridViewTextBoxColumn8").Value) Then
DblTotaleGiorniNU += CurRow.Cells("DataGridViewTextBoxColumn8").Value
End If
Next

' Visualizzo il risultato nella textbox

Me.GiornoNuTextBox.Text = ((DblTotaleGiorniNU / 30) - Fix(DblTotaleGiorniNU / 30)) * 30

' Ciclo tutte le righe e sommo il valore della colonna Mesi non utili

For Each CurRow As DataGridViewRow In Me.ServiziDataGridView.Rows
If IsNumeric(CurRow.Cells("DataGridViewTextBoxColumn7").Value) Then
DblTotaleMesiNU += CurRow.Cells("DataGridViewTextBoxColumn7").Value
End If
Next

' Visualizzi il risultato nella textbox

Me.MeseNuTextBox.Text = (((DblTotaleMesiNU) + (Fix((DblTotaleGiorniNU) / 30)))) / 12 - (Fix((DblTotaleMesiNU) + (Fix(DblTotaleGiorniNU) / 30)) / 12) * 12

' Ciclo tutte le righe e sommo il valore della colonna Anni non utili

For Each CurRow As DataGridViewRow In Me.ServiziDataGridView.Rows
If IsNumeric(CurRow.Cells("DataGridViewTextBoxColumn5").Value) Then
DblTotaleAnniNU += CurRow.Cells("DataGridViewTextBoxColumn5").Value
End If
Next

' Visualizzi il risultato nella textbox

Me.AnnoNuTextBox.Text = ((DblTotaleAnniNU) + (Fix((DblTotaleMesiNU) + Fix((DblTotaleGiorniNU) / 30))) / 12)


End Sub

Un Aiuto perfavore grazie
Mau67

Mau67 Profilo | Expert

RISOLTO ecco il codice esatto

Private Sub RicalcolaTotali()

' Dichiari una variabile di tipo double che memorizzerà il totale

Dim DblTotaleAnniNU As Double
Dim DblTotaleMesiNU As Double
Dim DblTotaleGiorniNU As Double

' Ciclo tutte le righe e sommo il valore della colonna Giorni non utili

For Each CurRow As DataGridViewRow In Me.ServiziDataGridView.Rows
If IsNumeric(CurRow.Cells("DataGridViewTextBoxColumn8").Value) Then
DblTotaleGiorniNU += CurRow.Cells("DataGridViewTextBoxColumn8").Value
End If
Next

' Visualizzo il risultato nella textbox

Me.GiornoNuTextBox.Text = ((DblTotaleGiorniNU / 30) - Fix(DblTotaleGiorniNU / 30)) * 30

' Ciclo tutte le righe e sommo il valore della colonna Mesi non utili

For Each CurRow As DataGridViewRow In Me.ServiziDataGridView.Rows
If IsNumeric(CurRow.Cells("DataGridViewTextBoxColumn7").Value) Then
DblTotaleMesiNU += CurRow.Cells("DataGridViewTextBoxColumn7").Value
End If
Next

' Visualizzi il risultato nella textbox

Me.MeseNuTextBox.Text = DblTotaleMesiNU + Fix((DblTotaleGiorniNU) / 30) - Fix(DblTotaleMesiNU / 12) * 12

' Ciclo tutte le righe e sommo il valore della colonna Anni non utili

For Each CurRow As DataGridViewRow In Me.ServiziDataGridView.Rows
If IsNumeric(CurRow.Cells("DataGridViewTextBoxColumn6").Value) Then
DblTotaleAnniNU += CurRow.Cells("DataGridViewTextBoxColumn6").Value
End If
Next

' Visualizzi il risultato nella textbox

Me.AnnoNuTextBox.Text = (DblTotaleAnniNU) + Fix((DblTotaleMesiNU) / 12)


End Sub

Mau67

SSUPERPIPPO Profilo | Guru

Scusa se non ti ho risposto prima ma ho visto solo ora i tuoi msg.

Comunque bravo, visto che ci sei arrivato da solo?!

Alla prossima, ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

Mau67 Profilo | Expert

Ho un altra domanda come faccio a bloccare la somma nelle text box degli anni mesi e giorni se il totale arriva a 19 anni 11 mesi e 30 giorni o superiore anche se continuo ad inserire campi nel datagridview?

Ciao e grazie


Mau67
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5