从一个datagridview到另一个c#.net的数据

时间:2014-10-16 12:32:38

标签: c# winforms datagridview

我在一个表单中有两个datagridviews,它们有一些相似的列 当用户单击一个按钮时,第二个datagridview的第二列和第三列的selectedrow的数据应该转到第一个datagridview的第一列和第二列。 我使用

检索了数据
string strppno = dataGridView2.SelectedCells[1].Value.ToString();
string strpartno = dataGridView2.SelectedCells[2].Value.ToString();

我可以使用

粘贴第二个datagridview
dataGridView1.Rows[0].Cells[1].Value = strppno;
dataGridView1.Rows[0].Cells[2].Value = strpartno;

我怎么也弄清楚如何循环它以便它可以多次使用或者多次使用。

有人可以帮帮我吗。我提前感谢您的任何建议。 Image for reference

第一次尝试。

for (int index = 0; index < dataGridView2.Rows.Count; index++)
{
int editIndex = dataGridView1.Rows.Add();
dataGridView1.Rows[editIndex].Cells[0].Value = dataGridView2.Rows[index].Cells[1].Value;
dataGridView1.Rows[editIndex].Cells[1].Value = dataGridView2.Rows[index].Cells[2].Value;
}

这将显示datagridview 2中的所有内容。我只想要选择的内容。

第二次尝试。

string strppno = dataGridView2.SelectedCells[1].Value.ToString();
string strpartno = dataGridView2.SelectedCells[2].Value.ToString();

for (int i = dataGridView2.SelectedRows.Count; i < dataGridView2.SelectedRows.Count + 1; i++)
{
    dataGridView1.Rows[i].Cells[i].Value = strppno;
    dataGridView1.Rows[i].Cells[i + 1].Value = strpartno;
}
    dataGridView1.Rows.Add(dataGridView2.SelectedRows.Count);
}

这种带来我想要的东西但是在错误的单元格中加上循环继续运行。 :( 我一直在摆弄第二个循环,但无法得到预期的结果.. :(

2 个答案:

答案 0 :(得分:1)

这样的事情对你有用:

private void dataGridView_SelectionChanged(object sender, EventArgs e) {
            foreach (DataGridViewRow row in dataGridView.SelectedRows) {
                string value1 = row.Cells[0].Value.ToString();
                string value2 = row.Cells[1].Value.ToString();
                //...
                //also set the second datagrid from here too
            }
        }

因此,在您的示例中,您将只想使用第二个和第三个Cell值,并将它们分配给您的其他数据网格:)


作为旁注,为了使你的变量更具可读性等,你应该习惯使用camelCase,

即。

您的string strpartno应该成为string strPartNo

以及正确命名dataGridViews / etc


从您的评论中,我意识到您的 insertInto 代码需要稍加修改:

目前,您放置它们:

dataGridView1.Rows[0].Cells[1].Value = strppno;
dataGridView1.Rows[0].Cells[2].Value = strpartno;
                   ^
                   |
              this will only place it into index 0 of the datagrid

所以,我建议首先

  int count = ... //count number of rows in SecondDatagrid

然后做:

dataGridView1.Rows[count++].Cells[1].Value = strppno;
dataGridView1.Rows[count++].Cells[2].Value = strpartno;
                   ^
                   |
              this will only place it into next 
              available row of the datagrid              

这样,您仍然会插入前两列,但不会覆盖当前存储的值。

答案 1 :(得分:0)

好的,所以我明白了...... 向dataGridView添加新行时会发生此问题。它不会在现有数据之后添加,而是在它之前添加。因此会发生异常。 以下解决方案以防万一其他人需要它。 :)

int count =0; // declare in public class

private void button3_Click(object sender, EventArgs e)
    {
        if (dataGridView2.SelectedRows.Count > 0)
        {
         dataGridView1.Rows.Add(dataGridView2.SelectedRows.Count); // add rows before entering data inside the new dataGridView.
        }
        foreach (DataGridViewRow row in dataGridView2.SelectedRows)
        {

            {
                string value1 = row.Cells[0].Value.ToString();
                string value2 = row.Cells[1].Value.ToString();
                dataGridView1.Rows[count].Cells[0].Value = value1;
                dataGridView1.Rows[count].Cells[1].Value = value2;
            }
        }

        count =count + 1;
        dataGridView2.ClearSelection(); // I used this because i have to work with 4 dataGridViews 
}