2013-06-22 55 views
0

这段代码的最后一行是为了填补在一排在一个DataGridView变量“温度”和“umidita”中的相关文本框中显示每次3列。的DataGridView增加了不必要的行

这些数据来自串口并获得每x秒更新一次。

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

该代码正在工作,但我得到3行在时间填写相同的数据。

enter image description here

我不熟悉的DataGridView,我不明白为什么我得到这样的行为。我需要改变时间才能得到一排,“temperatura”和“umidita”?

+0

也许被执行Rows.Add 3倍?你可以把一个断点和验证? –

+0

是的,它执行了3次。但为什么? – FeliceM

+0

是否多次调用'SetText'?它可能是数据输入。 –

回答

0

////你可以检查,如果你已经在这个时候插一排

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

它永远不会是同一时间。只有几毫西的差异,你建议的路线不起作用。实际上这个问题是由微型串口发送数据产生的。它每次发送一个字符串与记录器的值,所以数据来自不同的数据包。不过谢谢你的建议。现在,定时器延迟10毫秒工作正常,无论如何,记录间隔为30秒,因此有足够的时间来避免定时器出现问题。 – FeliceM

相关问题