两种方法将datagridview中的数据转换为DataTable
1.逐个将数据填入
public static DataTable ConvertDataGridViewToDataTable(DataGridView dataGridView)
{
DataTable dt = new DataTable();
foreach (DataGridViewColumn column in dataGridView.Columns)
{
dt.Columns.Add(column.HeaderText, column.ValueType);
}
foreach (DataGridViewRow row in dataGridView.Rows)
{
// 忽略添加空行(通常最后一行是空行)
if (!row.IsNewRow)
{
DataRow dataRow = dt.NewRow();
for (int i = 0; i < dataGridView.Columns.Count; i++)
{
dataRow[i] = row.Cells[i].Value;
}
dt.Rows.Add(dataRow);
}
}
return dt;
}
2.先转换为DataRow 数组 再一行一行填充
public static DataTable ConvertDataGridViewToDataTable1(DataGridView dataGridView)
{
// 使用 LINQ 将 DataGridView 中的数据转换为 DataRow 数组
var rows = dataGridView.Rows.Cast<DataGridViewRow>()
.Where(row => !row.IsNewRow)
.Select(row => row.Cells.Cast<DataGridViewCell>()
.Select(cell => cell.Value)
.ToArray());
// 创建 DataTable 并添加列
DataTable dataTable = new DataTable();
foreach (DataGridViewColumn column in dataGridView.Columns)
{
dataTable.Columns.Add(column.HeaderText, column.ValueType);
}
// 将 DataRow 数组转换为 DataTable
foreach (var row in rows)
{
dataTable.Rows.Add(row);
}
return dataTable;
}
两种方法比较,在我转换十万条数据的时候,两种方法的的速度基本上没什么区别,而且性能都不太行