2017-03-01 1 views
1

J'ai un DataGridView que je veux écrire dans un fichier texte. Voici mon code:DataGridView au fichier texte sous Windows Forms C#

private void WriteToFile_Click(object sender, EventArgs e) 
{ 
    StreamWriter sW = new StreamWriter("list.txt"); 
    for (int i = 0; i < 6; i++) 
    { 
     string lines = ""; 
     for (int col = 0; col < 6; col++) 
     { 
      lines += (string.IsNullOrEmpty(lines) ? " " : ", ") + 
       dataGridView.Rows[i].Cells[col].Value.ToString(); 
     } 
     sW.WriteLine(lines); 
     sW.Close(); 
    } 
} 

et quand je clique sur le bouton, il me donne une erreur:

System.NullReferenceException

+0

Salut Joe, essayez de mettre un peu plus d'effort dans votre question. Par exemple, lorsque vous déboguez à travers le WriteToFile_Click, où renvoie-t-il une référence null? Détails comme ceci aidez-nous, vous aider. – Alex

+0

Vérifiez si votre grille n'est pas plus petit que 6x6 – wdc

+0

Oh, je suis désolé, cela renvoie une référence nulle sur les lignes + = (string.IsNullOrEmpty (lines)? "": ",") + DataGridView.Rows [i] .Cells [ col] .Value.ToString(); –

Répondre

1

Joe,

Essayez d'utiliser un pour chacun pour vos boucles:

StreamWriter sW = new StreamWriter("list.txt"); 
foreach (DataGridViewRow r in dataGridView.Rows) { 
    string lines = ""; 
    foreach (DataGridViewCell c in r.Cells) { 
     lines += (string.IsNullOrEmpty(lines) ? " " : ", ") + dataGridView.Rows[i].Cells[col].Value == null ? string.Empty : dataGridView.Rows[i].Cells[col].Value; 
    } 

    sW.WriteLine(lines); 
} 
+0

Cela semble plus sûr, mais vous devez vérifier null sur c.Value avant de faire ToString() sinon vous obtiendrez une exception NullReferenceException. –

1

une ou plusieurs valeurs dans votre grille sont null, ou, en d'autres termes, 'rien'. Ainsi, lorsque vous utilisez l'accès à la propriété dataGridView.Rows[i].Cells[col].Value, puis que vous le convertissez en chaîne, vous essayez de convertir null en chaîne, ce qui génère une exception. Vous devriez vérifier les valeurs NULL, quelque chose comme ceci:

(si vous utilisez .net 4,6)

lines += (string.IsNullOrEmpty(lines) ? " " : ", ") + dataGridView.Rows[i].Cells[col].Value?.ToString(); 

avis de la marque supplémentaire question après Value

(si vous utilisez plus ancien .net)

lines += (string.IsNullOrEmpty(lines) ? " " : ", ") + dataGridView.Rows[i].Cells[col].Value == null ? string.Empty : dataGridView.Rows[i].Cells[col].Value; 

Espérons que cela aide.

EDIT: Depuis que vous obtenez System.ArgumentOutOfRangeException, assurez-vous que vous ne sortez pas des limites de la grille - en essayant d'accéder à une ligne ou une colonne à plusieurs. Pour être sûr que vous êtes dans la limite, utilisez

for (int i = 0; i < dataGridView.RowCount; i++) 

pour votre première boucle et

for (int col = 0; col < dataGridView.ColumnCount; col++) 

pour la deuxième

+0

Je reçois cela quand j'essaye le code Une exception non gérée de type 'System.ArgumentOutOfRangeException' s'est produite –

+0

@ Joe.guid J'ai édité ma réponse ... – Nino

+0

vous êtes un vrai sauveur de vie merci frère! –