Oppure

Loading
10/12 10:54
pacifico
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:


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 10/12 14:26
aaa
10/12 11:04
pacifico
mi scuso per non aver inserito il codice nel tag.
aaa
10/12 14:50
Thejuster
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[i].Cells[4].Value.ToString() + "\t";);

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

DataGridView1.Rows[i].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:

// 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

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]);
    }
}



mire.forumfree.it/ - Mire Engine
C# UI Designer
10/12 16:03
pacifico
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.
aaa
10/12 17:20
Thejuster
Si hai ragione.
Non avevo testato il codice l'avevo buttato giù a memoria.

la versione corretta è questa


Scrittura


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


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 10/12 17:47
mire.forumfree.it/ - Mire Engine
C# UI Designer
10/12 18:09
pacifico
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.
aaa
10/12 22:22
Thejuster
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

stackoverflow.com/questions/3195813/…
mire.forumfree.it/ - Mire Engine
C# UI Designer
12/12 5:57
nessuno
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 nessuno 12/12 6: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à.