2013-06-22 56 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

相關問題