Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - C# Somma valori alle colonne del DataGridView.
Forum - C# / VB.NET - C# Somma valori alle colonne del DataGridView. - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
pacifico (Normal User)
Rookie


Messaggi: 30
Iscritto: 11/12/2012

Segnala al moderatore
Postato alle 8:35
Lunedì, 06/02/2023
Buongiorno Carlo,

mi scuso del ritardo, ho avuto problemi con il server invio il link del file.

Ringrazio per la pazienza e fiducioso, auguro una buona giornata.

Domenico.

https://www.mediafire.com/file/l8sbc1lle52etdg/Somma+delle+ ...

noto che non appare il finale .7z/file ed l'inizio https://www.

Ultima modifica effettuata da pacifico il 06/02/2023 alle 9:01
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1170
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 9:43
Lunedì, 06/02/2023
Nello zip non vedo i file .xml che dovrebbero essere caricati.

I tuoi zip allegali qui. Quando rispondi sotto c'è: seleziona un file da allegare.

Ultima modifica effettuata da Carlo il 06/02/2023 alle 9:44


in programmazione tutto è permesso
PM Quote
Avatar
pacifico (Normal User)
Rookie


Messaggi: 30
Iscritto: 11/12/2012

Segnala al moderatore
Postato alle 10:21
Lunedì, 06/02/2023
Gent.mo Carlo,

ringrazio per la tempestività.

allego la cartella dove sono salvati i file Xml.

Detta cartella è creata in:
AppData>Roaming>GestioneOperazioni ed all'interno ci sono 3 cartelle: Documenti>Nomi>TabellaATabellaB.
Domenico
Scusa non trovo Allega file invierò il link.
https://www.mediafire.com/file/hkolfqgwbx2q9z1/GestioneOper ...

Ultima modifica effettuata da pacifico il 06/02/2023 alle 10:29
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1170
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 14:30
Lunedì, 06/02/2023
L'errore è di concetto, nella tabella carichi dei numeri con la virgola che non possono essere convertiti in interi.
E' sufficiente fare la conversione in double, oppure se vuoi gli interi, nell'xml i numeri devono essere senza virgola o arrotondati all'intero più vicino prima di inserirli in tabella.

Il codice con la conversione in double double.TryParse

Codice sorgente - presumibilmente C#

  1. private void Carica_TabellaA()
  2. {
  3.      DataGridView.Rows.Clear();
  4.  
  5.      string[] elementi_passati = new string[Percorso.Conta_numero_elementi_TabellaA()];
  6.  
  7.      elementi_passati = Percorso.Carica_contenuto_elementiTabellaA();
  8.      for (int y = 0; y < elementi_passati.Length; y++)
  9.      {
  10.           XmlDocument DocumentoXml = new XmlDocument();
  11.           DocumentoXml.Load(elementi_passati[y]);
  12.           string idContatto = System.IO.Path.GetFileNameWithoutExtension(elementi_passati[y]);
  13.           XmlNode nodotextbox5 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox5");
  14.           XmlNode nodotextbox6 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox6");
  15.           XmlNode nodotextbox7 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox7");
  16.           XmlNode nodotextbox8 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox8");
  17.  
  18.           string[] nuovarigaA = { idContatto, nodotextbox5.InnerText, nodotextbox6.InnerText,
  19.                                                    nodotextbox7.InnerText, nodotextbox8.InnerText };
  20.  
  21.           DataGridView.Rows.Add(1, " ", nodotextbox5.InnerText);
  22.           DataGridView.Rows.Add(2, " ", nodotextbox6.InnerText);
  23.           DataGridView.Rows.Add(3, " ", nodotextbox7.InnerText);
  24.           DataGridView.Rows.Add(4, " ", nodotextbox8.InnerText);
  25.  
  26.  
  27.           double Totale = 0; //double
  28.           for (int i = 0; i < DataGridView.Rows.Count; i++)
  29.           {
  30.                double col2 = 0; //double
  31.                //tentativo di conversione da string a double
  32.                if (double.TryParse(DataGridView.Rows[i].Cells["Tabella A"].Value.ToString(), out col2))
  33.                {
  34.                     Totale += col2; // se la conversione è andata a buon fine
  35.                }
  36.           }
  37.           DataGridView.Rows.Add(5, "Totale", Totale);
  38.      }
  39. }


Ultima modifica effettuata da Carlo il 06/02/2023 alle 15:43


in programmazione tutto è permesso
PM Quote
Avatar
pacifico (Normal User)
Rookie


Messaggi: 30
Iscritto: 11/12/2012

Segnala al moderatore
Postato alle 16:19
Lunedì, 06/02/2023

Gent.mo Carlo,

Risolto, grazie della disponibilità soprattutto della pazienza.

Buon pomeriggio.

Domenico.

PM Quote
Avatar
pacifico (Normal User)
Rookie


Messaggi: 30
Iscritto: 11/12/2012

Segnala al moderatore
Postato alle 9:08
Mercoledì, 15/02/2023
Buongiorno,

sono a chiedere una cortesia riguardo la somma alla colonna del DataGrdiView che viene popolata dai valori numerici compreso i decimali con file Xml.
Inserendo i numeri interi, la somma risulta perfetta viceversa inserendo i numeri decimali, no.
Per i numeri decimali ho inserito:
5.23+6+45.12+5.24+3.21 e la somma dovrebbe essere di: 64.80 mentre risulta: 5886.
Il codice usato grazie a Carlo che saluto:

Codice sorgente - presumibilmente C#

  1. double Totale = 0;
  2. for (int i = 0; i < DataGridView.Rows.Count; i++)
  3. {
  4.    double col2 = 0;  
  5. //tentativo di conversione da string a double
  6. if (double.TryParse(DataGridView.Rows[i].Cells["Tabella A"].Value.ToString(), out col2))
  7. {
  8.  Totale += col2; // se la conversione è andata a buon fine
  9. }
  10. }
  11. DataGridView.Rows.Add(6, "Totale", Totale);
  12.  
  13. per il codice riguardo ai numeri interi:
  14.  
  15. Int Totale = 0;
  16. for (int i = 0; i < DataGridView.Rows.Count; i++)
  17. {
  18.   int col2 = 0;
  19. //tentativo di conversione da string a int
  20. if (int.TryParse(DataGridView.Rows[i].Cells["Tabella A"].Value.ToString(), out col2))
  21. {
  22.  Totale += col2; // se la conversione è andata a buon fine
  23. }
  24. }
  25. DataGridView.Rows.Add(6, "Totale", Totale);



Gentilmente per modificare i codici per la visualizzazione al totale delle migliaia e decimali. (#,##0,###).

Ringrazio anticipatamente e fiducioso, saluto.
Domenico.


PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2240
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 11:00
Mercoledì, 15/02/2023
Evita di usare double.
usa i decimali.

Codice sorgente - presumibilmente C#

  1. decimal d1 = 0.70m; // 70 centesimi
  2. decimal d2 = 1.54m; // 1.54 euro
  3. decimal d3 = 7.45m; // 7.45 euro
  4.  
  5. decimal tot = d1 + d2 + d3;
  6.  
  7. MessageBox.Show($"Il Totale è {tot} € ");



PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1170
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 11:13
Mercoledì, 15/02/2023
Testo quotato

Postato originariamente da pacifico:
Inserendo i numeri interi, la somma risulta perfetta viceversa inserendo i numeri decimali, no.
Per i numeri decimali ho inserito:
5.23+6+45.12+5.24+3.21 e la somma dovrebbe essere di: 64.80 mentre risulta: 5886.
Il codice usato grazie a Carlo che saluto:

Codice sorgente - presumibilmente C#

  1. double Totale = 0;
  2. for (int i = 0; i < DataGridView.Rows.Count; i++)
  3. {
  4.    double col2 = 0;  
  5. //tentativo di conversione da string a double
  6. if (double.TryParse(DataGridView.Rows[i].Cells["Tabella A"].Value.ToString(), out col2))
  7. {
  8.  Totale += col2; // se la conversione è andata a buon fine
  9. }
  10. }
  11. DataGridView.Rows.Add(6, "Totale", Totale);
  12.  
  13. per il codice riguardo ai numeri interi:
  14.  
  15. Int Totale = 0;
  16. for (int i = 0; i < DataGridView.Rows.Count; i++)
  17. {
  18.   int col2 = 0;
  19. //tentativo di conversione da string a int
  20. if (int.TryParse(DataGridView.Rows[i].Cells["Tabella A"].Value.ToString(), out col2))
  21. {
  22.  Totale += col2; // se la conversione è andata a buon fine
  23. }
  24. }
  25. DataGridView.Rows.Add(6, "Totale", Totale);



Gentilmente per modificare i codici per la visualizzazione al totale delle migliaia e decimali. (#,##0,###).



non servono due codici per numeri interi e non, quello con la conversione in double che puoi cambiare anche in decimal come consiglia Thejuster va bene per entrambi.

Il tuo problema risiede nel fatto che hai inserito i valori nell'XML con il formato americano dove si usa il punto decimale, mentre il tuo PC sicuramente è impostato sulla cultura "it-IT" dove invece si usano le virgole decimali.
Per verificare se sostituisci i punti con le virgole nell'XML vedrai che la somma sarà corretta.
Per fare in modo che i punti decimali sino correttamente interpretati nel tuo PC localizzato in Italia, puoi temporaneamente cambiare l'impostazione ma poi se in un'altra tabella inserirai numeri con le virgole decimali il programma non rifunzionerà più.
Al tuo codice vanno inserite due righe:
Codice sorgente - presumibilmente C#

  1. private void Carica_TabellaA()
  2. {
  3.     // Cambio temporaneo dell'interpretazione del separatore decimale
  4.     System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
  5.     customCulture.NumberFormat.NumberDecimalSeparator = ".";
  6.     System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
  7.  
  8.     DataGridView.Rows.Clear();
  9.  
  10.     string[] elementi_passati = new string[Percorso.Conta_numero_elementi_TabellaA()];
  11.  
  12.     elementi_passati = Percorso.Carica_contenuto_elementiTabellaA();
  13.     for (int y = 0; y < elementi_passati.Length; y++)
  14.     {
  15.         XmlDocument DocumentoXml = new XmlDocument();
  16.         DocumentoXml.Load(elementi_passati[y]);
  17.         string idContatto = System.IO.Path.GetFileNameWithoutExtension(elementi_passati[y]);
  18.         XmlNode nodotextbox5 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox5");
  19.         XmlNode nodotextbox6 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox6");
  20.         XmlNode nodotextbox7 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox7");
  21.         XmlNode nodotextbox8 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox8");
  22.         XmlNode nodotextbox9 = DocumentoXml.DocumentElement.SelectSingleNode("/contatto/textbox9");
  23.  
  24.         string[] nuovarigaA = { idContatto, nodotextbox5.InnerText, nodotextbox6.InnerText, nodotextbox7.InnerText, nodotextbox8.InnerText, nodotextbox9.InnerText };
  25.  
  26.         DataGridView.Rows.Add(1, " ", nodotextbox5.InnerText);
  27.         DataGridView.Rows.Add(2, " ", nodotextbox6.InnerText);
  28.         DataGridView.Rows.Add(3, " ", nodotextbox7.InnerText);
  29.         DataGridView.Rows.Add(4, " ", nodotextbox8.InnerText);
  30.         DataGridView.Rows.Add(5, " ", nodotextbox9.InnerText);
  31.  
  32.  
  33.         decimal Totale = 0; //decimal
  34.         for (int i = 0; i < DataGridView.Rows.Count; i++)
  35.         {
  36.             decimal col2 = 0; //decimal
  37.             //tentativo di conversione da string a decimal
  38.             if (decimal.TryParse(DataGridView.Rows[i].Cells["Tabella A"].Value.ToString(), out col2))
  39.             {
  40.                 Totale += col2; // se la conversione è andata a buon fine
  41.             }
  42.         }
  43.         DataGridView.Rows.Add(6, "Totale", Totale.ToString("0.00")); // formattato con due decimali
  44.     }
  45. }


Ultima modifica effettuata da Carlo il 15/02/2023 alle 11:46


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo