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# Importare file di testo in DataGridView.
Forum - C# / VB.NET - C# Importare file di testo in DataGridView.

Avatar
pacifico (Normal User)
Rookie


Messaggi: 34
Iscritto: 11/12/2012

Segnala al moderatore
Postato alle 11:54
Domenica, 10/12/2023
Buongiorno,

regolarmente salvo i record di una DataGridView in formato .Txt in una cartella e non riesco ad importarli.

Riporto il codice per il salvataggio che funziona:

Codice sorgente - presumibilmente C++

  1. TextWriter sw = new StreamWriter(@"C:\Users\User\Desktop\Prova.txt");
  2. int rowcount = DataGridView.Rows.Count;
  3. for (int i = 0; i < rowcount; i++)
  4. {
  5.     sw.WriteLine(DataGridView.Rows[i].Cells[0].Value.ToString() + "\t"
  6.         + DataGridView.Rows[i].Cells[1].Value.ToString() + "\t"
  7.         + DataGridView.Rows[i].Cells[2].Value.ToString() + "\t"
  8.         + DataGridView.Rows[i].Cells[3].Value.ToString() + "\t"
  9.         + DataGridView.Rows[i].Cells[4].Value.ToString() + "\t");
  10. }
  11.  
  12. sw.Close();
  13.  
  14. Riporto il codice per il prelevamento:
  15.  
  16. TextReader sw = new StreamReader(@"C:\Users\User\Desktop\Prova.txt");
  17. int rowcount = DataGridView1.Rows.Count;
  18. for (int i = 0; i < rowcount; i++)
  19. {
  20.     sw.ReadLine(DataGridView1.Rows[i].Cells[0].Value.ToString() + "\t"
  21.        + DataGridView1.Rows[i].Cells[1].Value.ToString() + "\t"
  22.        + DataGridView1.Rows[i].Cells[2].Value.ToString() + "\t"
  23.        + DataGridView1.Rows[i].Cells[3].Value.ToString() + "\t"
  24.        + DataGridView1.Rows[i].Cells[4].Value.ToString() + "\t");
  25. }
  26.  
  27. sw.Close();



Auguro che possiate suggerire per la risoluzione fiducioso, saluto.
Domenico

Ultima modifica effettuata da Thejuster il 10/12/2023 alle 15:26
PM Quote
Avatar
pacifico (Normal User)
Rookie


Messaggi: 34
Iscritto: 11/12/2012

Segnala al moderatore
Postato alle 12:04
Domenica, 10/12/2023
mi scuso per non aver inserito il codice nel tag.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2308
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:50
Domenica, 10/12/2023
1) Nella scritta, l'ultimo "\t" è inutile, visto che stai scrivendo linea per linea, finito il WriteLine è già una terminazione.

- La lettura è completamente sbagliata

DataGridView1.Rows.Cells[4].Value.ToString() + "\t");

Non significa niente.
Ovvero,  per assegnare un valore alle cella devi dire

DataGridView1.Rows.Cells[4].Value = "Valore da impostare"

2) Cambia la terminazione. Evita di usare \t come terminatore, ma aggiungi un simbolo ad esempio:

Simbolo " | " Nuova Cella  , Simbolo " - " Nuova riga.


Eviterei anche di usare TextWriter, ma direttamente un StreamWriter


Scrittura:

Codice sorgente - presumibilmente C# / VB.NET

  1. // Percorso del file
  2. string filePath = @"C:\Users\User\Desktop\Prova.txt";
  3.  
  4. // Creazione di un oggetto StreamWriter
  5. using (StreamWriter sw = new StreamWriter(filePath))
  6. {
  7.     for(int i = 0; i < DataGridView.Rows.Count; i++)
  8.     {
  9.         sw.Write(DataGridView.Rows[i].Cells[0].Value.ToString() + "|");
  10.         sw.Write(DataGridView.Rows[i].Cells[1].Value.ToString() + "|");
  11.         sw.Write(DataGridView.Rows[i].Cells[2].Value.ToString() + "|");
  12.         sw.Write(DataGridView.Rows[i].Cells[3].Value.ToString() + "|");
  13.         sw.WriteLine(DataGridView.Rows[i].Cells[4].Value.ToString() + "-");
  14.      }
  15. }




Lettura

Codice sorgente - presumibilmente C#

  1. string filePath = @"C:\Users\User\Desktop\Prova.txt";
  2.  
  3. using (StreamReader sr = new StreamReader(filePath))
  4. {
  5.     string file = sr.ReadToEnd();
  6.     string[] linee = file.Split('-'); // Terminatore righe '-'
  7.  
  8.     foreach (string s in linee)
  9.     {
  10.         string[] linea = s.Split('|');
  11.         DataGridView1.Rows.Add(linea[0], linea[1], linea[2], linea[3], linea[4]);
  12.     }
  13. }



https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
pacifico (Normal User)
Rookie


Messaggi: 34
Iscritto: 11/12/2012

Segnala al moderatore
Postato alle 17:03
Domenica, 10/12/2023
Gent.mo Thejuster,

ringrazio della disponibilità.

Per il scrittura va bene e la lettura no presenta il seguente errore alla riga:
"DataGridView1.Rows.Add(linea[0], linea[1], linea[2], linea[3], linea[4]);

(System.IndexOutOfRangeException: "Indici oltre i limiti della matrice").

Domenico.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2308
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 18:20
Domenica, 10/12/2023
Si hai ragione.
Non avevo testato il codice l'avevo buttato giù a memoria.

la versione corretta è questa


Scrittura

Codice sorgente - presumibilmente C#

  1. string filePath = @"C:\Users\User\Desktop\Prova.txt";
  2.  
  3. using (StreamWriter sw = new StreamWriter(filePath))
  4. {
  5.     for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
  6.     {
  7.         sw.Write(dataGridView1.Rows[i].Cells[0].Value.ToString() + "|");
  8.         sw.Write(dataGridView1.Rows[i].Cells[1].Value.ToString() + "|");
  9.         sw.Write(dataGridView1.Rows[i].Cells[2].Value.ToString() + "|");
  10.         sw.Write(dataGridView1.Rows[i].Cells[3].Value.ToString() + "|");
  11.         sw.WriteLine(dataGridView1.Rows[i].Cells[4].Value.ToString() + "-");
  12.     }
  13. }




Lettura

Codice sorgente - presumibilmente C#

  1. string filePath = @"C:\Users\User\Desktop\Prova.txt";
  2.  
  3. dataGridView1.Rows.Clear(); //Pulisce il dataGrid
  4. using (StreamReader sr = new StreamReader(filePath))
  5. {
  6.     string file = sr.ReadToEnd();
  7.     string[] linee = file.Split('-'); // Terminatore righe '-'
  8.  
  9.     for(int i = 0; i < linee.Length-1;i++)
  10.     {
  11.         string[] linea = linee[i].Split('|');
  12.         dataGridView1.Rows.Add(linea[0], linea[1], linea[2], linea[3], linea[4]);
  13.     }
  14. }



Ho aggiunto un ciclo for per evitare che esca fuori dagli indici.

Ultima modifica effettuata da Thejuster il 10/12/2023 alle 18:47


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
pacifico (Normal User)
Rookie


Messaggi: 34
Iscritto: 11/12/2012

Segnala al moderatore
Postato alle 19:09
Domenica, 10/12/2023
Gent.mo Thejuster,

ringrazio della gentilezza e tempestività funziona.

Approfitto della cortesia essendo lo stesso argomento, se è possibile modificare
il codice per il salvataggio e lettura in Xml.

Grato, auguro buon proseguimento.

Domenico.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2308
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 23:22
Domenica, 10/12/2023
Per la serializzazione cambia completamente tutto.
Bisogna creare una classe o struttura adeguata per poi salvare i valori formattati in xml e viceversa per caricarli.

ecco un esempio da stackoverflow

https://stackoverflow.com/questions/3195813/xml-serializati ...


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 6:57
Martedì, 12/12/2023
Testo quotato

Postato originariamente da Thejuster:


la versione corretta è questa




Pappa pronta al pomodoro. Anche questa volta Pacifico ce l'ha fatta

Testo quotato



Approfitto della cortesia essendo lo stesso argomento, se è possibile modificare
il codice per il salvataggio e lettura in Xml.



Ma non gli basta... ne vorrebbe ancora di pappa pronta.

Studiare e fare da solo, no, troppa fatica

Ultima modifica effettuata da nessuno il 12/12/2023 alle 7:00


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote