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();