2017-03-31 8 views
0

私は申し訳ありませんが、トピックと私の問題がミスマッチしていますが、私はdo.Anyways、2つのリストボックス、2 datagridviews、チャート、開始と停止ボタンとストップウォッチを行うことができる最高です。開始ボタンをクリックすると、リストボックス1のデータ(listbox1 =データはシリアルポートから送られ、listbox2 =時間(経過))が表示され、リアルタイムチャートが開始されます。ストップボタンを押すと、リストボックスのすべての値が、別々の列としてdatagridviewにコピーされます。次に、開始ボタンをもう一度クリックすると、リストボックスとデータグリッドビューからすべての前のデータをクリアして、リフレッシュされたstartで開始します。次に、同じ手順(前に説明した)で新しいデータをクリックします停止ボタン。しかし、問題があります;私は停止ボタンをクリックします。新しいデータ(datagirdviewにコピーされた)私は、datagridview2の最初の行が前のものの最新の行であることに直面しています。私は測定の2倍の時間を意味する、それはそれをクリアするために書き込む前のデータの最後の行を保存して、新しい測定の最初の行としてそれを追加しています。3番目の測定では、 1つは最初の行として、それはすべての測定でそのようになります。私は問題がどこにあるのかわかりません。手伝って頂けますか?リストボックスアイテムをループ中の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

はその後のDataGridViewにバインドするのBindingSourceを、のBindingSourceにリストボックスの項目を結合してみます。 ListBoxの項目が変更されると、DataGridViewの行がリアルタイムで更新されます。

これでbtnStopReceiving_Click方法であなたのforeach文を交換してみてください:

BindingSource bs = new BindingSource(); 
bs.DataSource = listBox1.Items; 
bs.ResetBindings(false); 
dataGridView1.DataSource = bs; 
関連する問題