我正在用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;
答案 0 :(得分:0)
以下是有关CellValidation事件的更详细文档:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvalidating.aspx