3

我有一个绑定到数据源的 datagridview,column[0] AgencyName 是主键,不能为空。单击 Bindingnavigator ( + ) 加号添加新行(两次)将导致错误“列 (AgencyName) 不允许为空”。如何处理这个空异常?

总的来说,你能告诉我如何在绑定到数据源的 datagridview 中处理 null 和主键约束。请注意,我只是将数据源拖到 winform 中来创建它。

形式

我有这个代码

    private void clientsDataGridView_Validating(object sender, CancelEventArgs e)
    {

        DataGridViewRow row = clientsDataGridView.CurrentRow as DataGridViewRow;

        if (row.Cells[0].Value == DBNull.Value)
        {

           clientsDataGridView.CancelEdit();                
           e.Cancel = true;

        }
     }

除非我提供有效值,否则此代码不会让我浏览其他记录。我希望每当我移动到其他行时取消新行(包含无效数据)

4

1 回答 1

3

Control.Validating事件描述(DataGridView 继承自):

如果在 Validating 事件委托中将 CancelEventArgs 的 Cancel 属性设置为 true,则通常会在 Validating 事件之后发生的所有事件都将被抑制。

因此,通过设置 e.Cancel = true 您告诉 DataGridView 取消所有后续事件(包括 RowLeave)。

您正在使用 Bindingsource 并将 Datagridview 绑定到它?如果是这样,我会尝试调用 Bindingsource.CancelEdit() 而不是 Datagridview.CancelEdit()。

也许:

Dim bm As BindingManagerBase = clientsDatagridView.BindingContext(clientsDatagridView.DataSource, clientsDatagridView.DataMember)
bm.CancelCurrentEdit()
于 2012-06-18T16:30:04.180 回答