2013-06-22 3 views
0

La dernière ligne de ce code est censée remplir une ligne avec 3 colonnes dans un datagridview chaque fois que les variables "temperature" et "umidita" sont affichées dans les zones de texte correspondantes.Datagridview additionne les lignes non désirées

Ces données proviennent du port série et sont mises à jour toutes les x secondes.

private void SetText(string text) 
    { 
     string temperatura; 
     string umidita; 

     if (this.txtOutput.InvokeRequired) 
     { 
      SetTextCallback d = new SetTextCallback(SetText); 
      this.BeginInvoke(d, new object[] { text }); 
     } 

     else 
     { 

      string f = text; 
      char firstChar = f[0]; 

      if (firstChar == 'T') 
      { 
       temperatura = f; 
       temperatura = f.Replace("T", ""); 
       textBox1.Text = temperatura; 
      } 

      else if (firstChar == 'U') 
      { 
       umidita = f; 
       umidita = f.Replace("U", ""); 
       textBox2.Text = umidita; 
      } 
      dataGridView1.Rows.Add(new string[] { DateTime.Now.ToString("HH:mm:ss"), textBox1.Text, textBox2.Text }); 
     } 
    } 

Le code fonctionne, mais j'obtiens 3 lignes à temps rempli avec les mêmes données.

enter image description here

Je ne suis pas familier avec datagridview et je ne comprends pas pourquoi je reçois un tel comportement. Qu'est-ce que j'ai besoin de changer pour obtenir une ligne à la fois remplie de temps, "temperatura" et "umidita"?

+0

Peut-être Rows.Add est exécuté 3 fois? pouvez-vous mettre un point d'arrêt et vérifier? –

+0

Oui, il est exécuté 3 fois. Mais pourquoi? – FeliceM

+0

Est-ce que 'SetText' est appelé plusieurs fois? Ce pourrait être l'entrée de données. –

Répondre

0

//// vous pouvez vérifier si vous avez déjà inséré une ligne dans ce temps

int rowsCount = dataGridView1.Rows.Count; 
     string cuurentTime = DateTime.Now.ToString("HH:mm:ss"); 
     if (cuurentTime != dataGridView1.Rows[rowsCount - 1].Cells[0].Value.ToString()) 
     { 
      dataGridView1.Rows.Add(new string[] { cuurentTime, textBox1.Text, textBox2.Text }); 
     } 
+0

Ce ne serait jamais la même heure. Juste quelques différences de millisec et la ligne que vous avez suggérée ne fonctionne pas. En fait, le problème est généré à partir du micro envoyant les données sur le port série. Il envoie une chaîne à la fois avec la valeur de l'enregistreur, de sorte que les données sont fournies dans des paquets distincts. Cependant merci pour la suggestion. À l'heure actuelle, le délai de 10 ms fonctionne correctement, en tout cas, les enregistrements sont effectués avec des intervalles de 30 secondes, ce qui laisse suffisamment de temps pour éviter les problèmes de minuterie. – FeliceM

Questions connexes