“当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行。” 的解决一法

        当控件的DataSource绑定数据源后,便不能直接添加新行了(可以删除、修改)。很多朋友会通过重新绑定数据源、操作源DataTable来解决。要是代码无法访问到DataTable怎么办?有人建议转DataGridView为DataTable,然后操作DataTable再重绑。这样也行,只是当DataGridView数据量很大时就会很费时,代码效率低。可以这样来做:


void ImportData(DataGridView sourceGridView)
{
       ((DataTable)sourceGridView.DataSource).Rows.Add();
       //
       //...............
       //
}

       DataSource 的类型是 object,在已知数据源类型的情况下将 DataSource 强制转换后既可以访问原类型了。

希望此例能抛砖引玉,帮助到需要的朋友,或者有更好的办法请不吝告知,谢谢!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题可能是由于 DataGridView 控件DataSource 属性被设置为数据源对象,因此不能直接向 DataGridView集合添加。如果要在数据绑定添加,可以尝试以下两种方法: 1. 如果数据源是 DataTable,可以向 DataTable 添加,并更新 DataGridViewDataSource 属性。示例代码如下: ```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 控件添加,你可以根据自己的需求选择其一种方法来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值