C# datagirdview 当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行 如何解决
时间: 2024-02-12 12:06:24 浏览: 151
这个问题可能是由于 DataGridView 控件的 DataSource 属性被设置为数据源对象,因此不能直接向 DataGridView 的行集合中添加行。如果要在数据绑定后添加行,可以尝试以下两种方法:
1. 如果数据源是 DataTable,可以向 DataTable 中添加新行,并更新 DataGridView 的 DataSource 属性。示例代码如下:
```csharp
// 获取 DataGridView 的数据源
DataTable dt = (DataTable)dataGridView1.DataSource;
// 创建一个新行
DataRow newRow = dt.NewRow();
newRow["Column1"] = "Value1";
newRow["Column2"] = "Value2";
newRow["Column3"] = "Value3";
// 将新行添加到 DataTable 中
dt.Rows.Add(newRow);
// 更新 DataGridView 的数据源
dataGridView1.DataSource = dt;
```
2. 如果数据源是 List 或其他集合对象,可以将新行添加到集合中,并使用 BindingSource 对象将集合绑定到 DataGridView 控件。示例代码如下:
```csharp
// 创建一个新行对象
var newRow = new { Column1 = "Value1", Column2 = "Value2", Column3 = "Value3" };
// 将新行添加到集合中
List<object> dataList = (List<object>)bindingSource1.DataSource;
dataList.Add(newRow);
// 刷新 BindingSource
bindingSource1.ResetBindings(false);
```
需要注意的是,第二种方法需要使用 BindingSource 对象将集合对象绑定到 DataGridView 控件,因此需要先创建一个 BindingSource 对象,并将其绑定到 DataGridView 控件上。示例代码如下:
```csharp
// 创建 BindingSource 对象,并将其绑定到 DataGridView 控件
bindingSource1 = new BindingSource();
bindingSource1.DataSource = dataList;
dataGridView1.DataSource = bindingSource1;
```
以上两种方法都可以在数据绑定后向 DataGridView 控件中添加行,你可以根据自己的需求选择其中一种方法来实现。
阅读全文