将选定的datagridview发送到datatable

时间:2015-09-25 13:29:45

标签: c# datagridview datatable

我正在尝试将选定的datagridview行添加到数据表中。

使用以下代码,我可以发送selectrow,但是当尝试向数据表发送第二行时,它会添加一个空行,但会覆盖数据表中的第一行。

for (int i = 0; i < dataGridview.SelectedRows.Count; i++)
        {
            DT1.Rows.Add();

            for (int j = 0; j < dataGridview.Columns.Count; j++)
            {
                DT1.Rows[0][j] = dataGridview.SelectedRows[i].Cells[j].Value;
            }
        }

正如预期的那样,它进入了索引0的行,所以我尝试了下面的行到达最后一行

for (int j = 0; j < dataGridview.Columns.Count; j++)
            {
                int rowcount = DT1.Rows.Count;
                DT1.Rows[rowcount][j] = dataGridview.SelectedRows[i].Cells[j].Value;
            }

这给了我一个错误,该行不存在,应该是添加第二行而不是替换的解决方案?

3 个答案:

答案 0 :(得分:1)

rowcount

出现问题

Rowcount为您提供总行数,但rowindex始终以0开头 即rowindex = rowcount-1 使用这个

for (int j = 0; j < dataGridview.Columns.Count; j++)
{
    int rowcount = DT1.Rows.Count;
    DT1.Rows[rowcount-1][j] = dataGridview.SelectedRows[i].Cells[j].Value;
}

答案 1 :(得分:1)

您的代码中还有其他问题。也就是说,如果您的用户在对此代码的不同调用中选择相同的行,则将插入重复项。

修复rowcount,将其更改为rowcount-1。然后检查您的设计。想出一种防止重复插入的方法(除非你真的想要这样做)。

答案 2 :(得分:0)

DT1.Rows[i][j] = dataGridview.SelectedRows[i].Cells[j].Value,ToString();

试试这个!你的外部循环已经跟踪了表中的行,所以不需要弄乱行数。