Datagridview列不允许null

时间:2012-06-18 03:12:02

标签: datagridview null newrow

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

总的来说,您可以向我展示如何在绑定到数据源的datagridview中处理null和主键约束。请注意,我只是将数据源拖到winform中来创建它。

Form

我有这段代码

    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;

        }
     }

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

1 个答案:

答案 0 :(得分: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()