如何将列表框项添加到datagridview中,因为它处于循环中?

时间:2017-03-31 13:33:17

标签: c# winforms datagridview listbox

我很抱歉,如果主题和我的问题不匹配,但它是我能做的最好。不过,我有2个列表框,2个数据网页,图表,开始和停止按钮和秒表。当我单击开始按钮列表框获取数据时(listbox1 =来自串口的数据和listbox2 =时间(已过去))并且实时图表正在开始。当我按下停止按钮时,列表框中的所有值都将复制到datagridview作为分隔列。然后,如果我再次单击开始按钮,我想清除所有以前的数据(从列表框和datagridviews)开始刷新和新的开始。然后我开始再次获取新数据作为相同的程序(我之前提到),直到我点击停止按钮。但是有一个问题;当我点击停止按钮时。在新数据(复制到datagirdview)中,我面对的是datagridview2的第一行是前一行的最新行。我的意思是在测量的两次时间内,它保存了先前数据的最新行(即使我写清楚它)并将其添加为新测量的第一行。在第三次测量中它获得第二行的最新行一个作为第一行,它在每次测量中都是这样的。我不知道问题出在哪里?你能救我吗?

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

        }
    }

1 个答案:

答案 0 :(得分:0)

尝试将ListBox项绑定到BindingSource,然后将BindingSource绑定到DataGridView。这将在ListBox项更改时实时更新DataGridView行。

尝试使用以下方法替换btnStopReceiving_Click方法中的foreach循环:

BindingSource bs = new BindingSource();
bs.DataSource = listBox1.Items;
bs.ResetBindings(false);
dataGridView1.DataSource = bs;