Validation 数据表验证:列更改与行更改

Validation 数据表验证:列更改与行更改,validation,ado.net,dataset,strongly-typed-dataset,Validation,Ado.net,Dataset,Strongly Typed Dataset,以下是我保存数据集的表单代码: salesInvoiceBindingSource.EndEdit(); salesInvoiceLineBindingSource.EndEdit(); if (invoiceDataSet.HasChanges() && !invoiceDataSet.HasErrors) { this.tableAdapterManager.UpdateAll(this.invoiceDataSet); } 我注意到,如果我将验证代码放在Colum

以下是我保存数据集的表单代码:

salesInvoiceBindingSource.EndEdit();
salesInvoiceLineBindingSource.EndEdit();
if (invoiceDataSet.HasChanges() && !invoiceDataSet.HasErrors)
{
    this.tableAdapterManager.UpdateAll(this.invoiceDataSet);
}
我注意到,如果我将验证代码放在ColumnChanging事件中:

void SalesInvoiceDataTable_ColumnChanging(object sender, 
                                   System.Data.DataColumnChangeEventArgs e)
{
    if (e.Column.ColumnName == "CustomerCode")
    {
        if (string.IsNullOrWhiteSpace((string)e.ProposedValue))
            e.Row.SetColumnError("CustomerCode", "Required");
        else
            e.Row.SetColumnError("CustomerCode", string.Empty);
        }
    }
}
即使CustomerCode为空字符串,invoiceDataSet.HasErrors也为false,因为事件在保存dataset后激发。但若我将验证代码放入RowChanging事件中,它将在UpdateAll()方法之前触发;所以它工作得很好。为什么会这样?我想使用ColumnChanging事件,而不是RowChanging事件

编辑:这会发生在由以下人员创建的新记录上:

salesInvoiceBindingSource.AddNew();