2017-03-31 29 views
0

對不起,如果主題和我的問題是不匹配,但它是我能做的最好的。總之,我有2個列表框,2個datagridviews,圖表,開始和停止按鈕和秒錶。當我點擊開始按鈕列表框獲取數據(listbox1 =數據來自串行端口和listbox2 =時間(已過去)),並開始實時製圖。當我按停止按鈕列表框中的所有值複製到datagridview作爲分隔列。然後,如果我再次單擊開始按鈕,我想清除所有以前的數據(從列表框和數據網格)開始刷新和新的開始。然後我開始重新獲取新的數據作爲相同的程序(我之前提到),直到我點擊停止按鈕。但是有一個問題;當我點擊停止按鈕時。在新數據(複製到datagirdview)中,我面對datagridview2的第一行是前一行的最後一行。我的意思是在測量的兩倍時間內,它保存了以前數據的最後一行(即使我寫入來清除它)並將其添加爲新測量的第一行。在第三次測量中,它獲得第二行的最後一行一個作爲第一排,每次測量都會這樣。我不知道問題在哪裏?你可以幫我嗎?如何將listbox項添加到datagridview中,因爲它在循環中?

private void btnStart_Click(object sender, EventArgs e) 
    { 


     btnOpenFile.Enabled = false; 
     btnStore.Enabled = false; 
     btnSend.Enabled = false; 
     btnStopReceiving.Enabled = true; 
     btnStart.Enabled = false; 
     btnTrig.Enabled = true; 
     watch.Reset(); 
     watch.Start(); 
     zaman.Enabled = true; 
     timer1.Enabled = true; 
     listBox1.Items.Clear(); 
     listBox2.Items.Clear(); 
     dataGridView1.Rows.Clear(); 
     dataGridView2.Rows.Clear(); 

     foreach (var series in chrtAcq.Series) 
     { 
      series.Points.Clear(); 
     } 
    } 

    private void btnStopReceiving_Click(object sender, EventArgs e) 
    { 
     watch.Stop(); 
     zaman.Enabled = false; 
     timer1.Enabled = false; 

     btnSend.Enabled = true; 
     btnOpenFile.Enabled = true; 
     btnStopReceiving.Enabled = false; 
     btnStart.Enabled = true; 


     btnStore.Enabled = true; 
     btnSend.Enabled = false; 
     foreach (var item in listBox1.Items) 
     { 
      dataGridView1.Rows.Add(); 
      dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[1].Value = item; 

     } 

     foreach (var item2 in listBox2.Items) 
     { 
      dataGridView2.Rows.Add(); 
      dataGridView2.Rows[dataGridView2.Rows.Count - 1].Cells[0].Value = item2; 
     } 
     for (int i = 0; i < dataGridView1.Rows.Count; i++) 
     { 
      for (int j = 1; j < dataGridView1.Columns.Count; j++) 
      { 
       dataGridView2.Rows[i].Cells[j].Value = 
        dataGridView1.Rows[i].Cells[j].Value; 
      } 

     } 
    } 

回答

0

嘗試將ListBox項綁定到BindingSource,然後將BindingSource綁定到DataGridView。這將在ListBox項目更改時實時更新DataGridView行。

嘗試用這種替代在btnStopReceiving_Click方法的foreach循環:

BindingSource bs = new BindingSource(); 
bs.DataSource = listBox1.Items; 
bs.ResetBindings(false); 
dataGridView1.DataSource = bs; 
相關問題