C#中如何从无绑定源生成的DataGridView中获取数据源?
把DataGridView手动添加的数据转为数据源的方法
嘿,这个需求其实挺常见的——当你一开始用Rows.Add()手动塞数据,后来想切换到数据源绑定模式时,只需要把现有行数据转成一个可绑定的数据源对象(比如DataTable)就行,具体步骤如下:
1. 创建匹配DataGridView列的DataTable
首先得建一个和你的DataGridView列结构一致的DataTable,这样数据才能正确映射:
// 初始化空DataTable DataTable gridDataTable = new DataTable(); // 遍历DataGridView的列,给DataTable添加对应列 foreach (DataGridViewColumn column in dataGridView1.Columns) { // 列名沿用DataGridView的列名,类型默认用object适配所有数据类型,你也可以根据实际调整 gridDataTable.Columns.Add(column.Name, typeof(object)); }
2. 将DataGridView的行数据导入DataTable
接下来把已有的行数据逐条搬到DataTable里,注意要跳过自动生成的新行(就是最后一行可编辑的空行):
// 遍历DataGridView的每一行 foreach (DataGridViewRow row in dataGridView1.Rows) { // 跳过新行,避免导入空数据 if (!row.IsNewRow) { DataRow newDataRow = gridDataTable.NewRow(); // 逐个单元格赋值 for (int colIndex = 0; colIndex < dataGridView1.Columns.Count; colIndex++) { // 处理空值,避免DBNull异常 newDataRow[colIndex] = row.Cells[colIndex].Value ?? DBNull.Value; } gridDataTable.Rows.Add(newDataRow); } }
3. 绑定DataTable作为数据源
最后把DataTable设为DataGridView的数据源即可,记得先清空原有绑定:
// 先清空旧数据源,避免冲突 dataGridView1.DataSource = null; // 绑定新的DataTable数据源 dataGridView1.DataSource = gridDataTable;
额外注意事项
- 如果你的DataGridView列是自定义设置的(比如指定了特定数据类型),记得把
DataTable对应列的类型改成匹配的,比如typeof(string)、typeof(int)等,避免类型转换问题。 - 要是之后想通过修改
DataTable来同步更新DataGridView的显示,直接操作DataTable就行,绑定模式下会自动刷新界面。
内容的提问来源于stack exchange,提问作者Saran Mohan
相关产品推荐
相关产品推荐

