向DataGridView添加新行错误:程序无法提交或退出单元格值更改

时间:2012-03-20 19:38:09

标签: c# winforms datagridview row

我正在用C#,.NET 4,winforms编写这个应用程序。

我想以编程方式将新行添加到绑定到集合的datagridview。当我这样做时,我得到一个例外。 (注意:当用户通过datagridview创建新行时(将某些内容输入新行)我没有问题。)

locationBindingSource.AddNew(); //this is bound to datagridview
var row = locationsDGV.Rows[locationsDGV.Rows.Count - 2]; //get the new row
locationsDGV.CurrentCell = row.Cells[0]; //switch to new row <-throws error

引发的错误: System.InvalidOperationException未处理。操作未成功,因为程序无法提交或退出单元格值更改。

我需要切换到一个新行,以确保用户不会将行保留在未经验证的状态。

是否可以在不禁用行验证的情况下克服此问题?

谢谢你的答案。

编辑: Bindingsource填充了Entity Framework创建的对象。当用户创建一个新对象时,例如“location”,它是使用默认值创建的,无法保存到数据库,因此我需要验证。我验证所有重要字段都不为空(或填充默认值)。如果他们是我取消验证。我认为只需一个简单的简单绑定列表(一个字符串字段就足够了)绑定到datagridview的对象,就可以轻松地重新创建它。然后创建一个行验证事件并使用类似的东西进行验证。

Location location = (Location)locationBindingSource.Current;
if (string.isNullOrWhitespace(location.stringProperty))
    e.cancel=true;