如何在没有任何数据源的情况下从DataGridView创建DataTable?

Mob*_*bin 14 c# datatable datagridview windows-forms-designer

我想从DataGridView获取Grid值的DataTable.

换句话说,DataTable与DataGridView值相同

Han*_*son 38

可能是一个更好的方法,但否则只需循环遍历DGV并手动创建DataTable将是相当微不足道的.

像这样的东西可能会起作用:

DataTable dt = new DataTable();
foreach(DataGridViewColumn col in dgv.Columns)
{
   dt.Columns.Add(col.Name);    
}

foreach(DataGridViewRow row in dgv.Rows)
{
    DataRow dRow = dt.NewRow();
    foreach(DataGridViewCell cell in row.Cells)
    {
        dRow[cell.ColumnIndex] = cell.Value;
    }
    dt.Rows.Add(dRow);
}
Run Code Online (Sandbox Code Playgroud)

  • 您可能希望通过将“col.CellTemplate.ValueType”参数添加到第 4 行中的“dt.Columns.Add”来保留克隆 DataTable 中的列类型。(在处理复制的表时,没有这个东西我得到了 FormatException。 ) (2认同)

小智 11

您可以将DataSource对象从DataGridView转换为DataTable

DataTable dt = new DataTable();
dt = (DataTable)dataGridView1.DataSource;
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,如果DataSource是BindingList <T>,这将不起作用,尽管我非常有希望. (5认同)

小智 5

您也可以使用以下代码,当您在数据表中添加或删除行时,此代码填充对DataGridView没有影响

DataTable dt = new DataTable();
dt = Ctype(dataGridView1.DataSource,DataTable).copy();
Run Code Online (Sandbox Code Playgroud)