如何仅传输datagridview中的选定行

时间:2015-01-11 22:03:40

标签: c# datagridview

我有一个包含2个datagridviews的表单,我想知道如何正确导入" datagridview1"只有选中的行进入第二个datagridview" DatagridCopy"?

我想从选定的行创建一个新的DataTable,并将该DataTable作为DatagridCopy的数据源。

我一直收到这个错误:

  

其他信息:值类型与列不匹配   类型无法存储< 8S3501>在t101PARTDataGridViewTextBoxColumn中   柱。预期的类型是DataGridViewTextBoxCell。

     DataTable dt = new DataTable();
     foreach (DataGridViewColumn column in dataGridView1.Columns)
             {
             dt.Columns.Add(column.Name, column.CellType); //better to have cell type TextBoxCell.
              for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
                {
                   dt.Rows.Add();
                   for (int j = 0; j < dataGridView1.Columns.Count; j++)
                    {
                     dt.Rows[i][j] = dataGridView1.SelectedRows[i].Cells[j].Value; //ERROR HERE<-----
                    }
                }
            }
BindingSource binding = new BindingSource();
binding.DataSource = dt;
DatagridCopy.DataSource = binding;

1 个答案:

答案 0 :(得分:2)

DataTable应该保存数据,没有任何可视信息,但是

 dt.Columns.Add(column.Name, column.CellType); 

你告诉它数据将是DataGridViewTextBoxCell,但是在这里

dt.Rows[i][j] = dataGridView1.SelectedRows[i].Cells[j].Value;

指定实际值而不是单元格。试试dt.Columns.Add(column.Name)或dt.Columns.Add(column.Name,typeof(string))或它实际上的任何类型。

如果您希望您的单元格是特定类型,则需要设置DatagridCopy,而不是dt。