
pacifico (Normal User)
Rookie
    
Messaggi: 34
Iscritto: 11/12/2012
|
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++ |
TextWriter sw = new StreamWriter(@"C:\Users\User\Desktop\Prova.txt"); int rowcount = DataGridView.Rows.Count; for (int i = 0; i < rowcount; i++) { sw.WriteLine(DataGridView.Rows[i].Cells[0].Value.ToString() + "\t" + DataGridView.Rows[i].Cells[1].Value.ToString() + "\t" + DataGridView.Rows[i].Cells[2].Value.ToString() + "\t" + DataGridView.Rows[i].Cells[3].Value.ToString() + "\t" + DataGridView.Rows[i].Cells[4].Value.ToString() + "\t"); } sw.Close(); Riporto il codice per il prelevamento: TextReader sw = new StreamReader(@"C:\Users\User\Desktop\Prova.txt"); int rowcount = DataGridView1.Rows.Count; for (int i = 0; i < rowcount; i++) { sw.ReadLine(DataGridView1.Rows[i].Cells[0].Value.ToString() + "\t" + DataGridView1.Rows[i].Cells[1].Value.ToString() + "\t" + DataGridView1.Rows[i].Cells[2].Value.ToString() + "\t" + DataGridView1.Rows[i].Cells[3].Value.ToString() + "\t" + DataGridView1.Rows[i].Cells[4].Value.ToString() + "\t"); } sw.Close();
|
Auguro che possiate suggerire per la risoluzione fiducioso, saluto.
Domenico
Ultima modifica effettuata da Thejuster il 10/12/2023 alle 15:26 |
|

pacifico (Normal User)
Rookie
    
Messaggi: 34
Iscritto: 11/12/2012
|
mi scuso per non aver inserito il codice nel tag.
|
|

Thejuster (Admin)
Guru^2
    
Messaggi: 2339
Iscritto: 04/05/2008
|
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 |
// Percorso del file
string filePath = @"C:\Users\User\Desktop\Prova.txt";
// Creazione di un oggetto StreamWriter
using (StreamWriter sw = new StreamWriter(filePath))
{
for(int i = 0; i < DataGridView.Rows.Count; i++)
{
sw.Write(DataGridView.Rows[i].Cells[0].Value.ToString() + "|");
sw.Write(DataGridView.Rows[i].Cells[1].Value.ToString() + "|");
sw.Write(DataGridView.Rows[i].Cells[2].Value.ToString() + "|");
sw.Write(DataGridView.Rows[i].Cells[3].Value.ToString() + "|");
sw.WriteLine(DataGridView.Rows[i].Cells[4].Value.ToString() + "-");
}
}
|
Lettura
Codice sorgente - presumibilmente C# |
string filePath = @"C:\Users\User\Desktop\Prova.txt"; using (StreamReader sr = new StreamReader (filePath )) { string file = sr.ReadToEnd(); string[] linee = file.Split('-'); // Terminatore righe '-' foreach (string s in linee) { string[] linea = s.Split('|'); DataGridView1.Rows.Add(linea[0], linea[1], linea[2], linea[3], linea[4]); } }
|
|
|

pacifico (Normal User)
Rookie
    
Messaggi: 34
Iscritto: 11/12/2012
|
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.
|
|

Thejuster (Admin)
Guru^2
    
Messaggi: 2339
Iscritto: 04/05/2008
|
Si hai ragione.
Non avevo testato il codice l'avevo buttato giù a memoria.
la versione corretta è questa
Scrittura
Codice sorgente - presumibilmente C# |
string filePath = @"C:\Users\User\Desktop\Prova.txt"; using (StreamWriter sw = new StreamWriter (filePath )) { for (int i = 0; i < dataGridView1.Rows.Count-1; i++) { sw.Write(dataGridView1.Rows[i].Cells[0].Value.ToString() + "|"); sw.Write(dataGridView1.Rows[i].Cells[1].Value.ToString() + "|"); sw.Write(dataGridView1.Rows[i].Cells[2].Value.ToString() + "|"); sw.Write(dataGridView1.Rows[i].Cells[3].Value.ToString() + "|"); sw.WriteLine(dataGridView1.Rows[i].Cells[4].Value.ToString() + "-"); } }
|
Lettura
Codice sorgente - presumibilmente C# |
string filePath = @"C:\Users\User\Desktop\Prova.txt"; dataGridView1.Rows.Clear(); //Pulisce il dataGrid using (StreamReader sr = new StreamReader (filePath )) { string file = sr.ReadToEnd(); string[] linee = file.Split('-'); // Terminatore righe '-' for(int i = 0; i < linee.Length-1;i++) { string[] linea = linee[i].Split('|'); dataGridView1.Rows.Add(linea[0], linea[1], linea[2], linea[3], linea[4]); } }
|
Ho aggiunto un ciclo for per evitare che esca fuori dagli indici. Ultima modifica effettuata da Thejuster il 10/12/2023 alle 18:47
|
|

pacifico (Normal User)
Rookie
    
Messaggi: 34
Iscritto: 11/12/2012
|
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.
|
|

Thejuster (Admin)
Guru^2
    
Messaggi: 2339
Iscritto: 04/05/2008
|
|
|

()
Newbie
    
Messaggi:
Iscritto:
|
Postato originariamente da Thejuster:
la versione corretta è questa
|
Pappa pronta al pomodoro. Anche questa volta Pacifico ce l'ha fatta
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 il 12/12/2023 alle 7:00 |
|