行数据校验(编辑状态)调用DoRowValidation()可以进行行数据校验。它实际上是触发RowValidating事件编写代码实现数据校验的。DoRowValidation方法对浏览状态的行无效,可以通过获取AspxGridView的IsEditing属性判断是否进入编辑状态。
RowValidating事件原型:
void ASPxGridView1_RowValidating(object sender, DevExpress.Web.Data.ASPxDataValidationEventArgs e)
DevExpress.Web.Data.ASPxDataValidationEventArgs构造函数:
public ASPxDataValidationEventArgs(bool isNew);
DevExpress.Web.Data.ASPxDataValidationEventArgs属性:
Errors: Dictionary<GridViewColumn, string >,行错误集合,只读。
HasErrors:bool,待处理的行是否有错。只读。
IsNewRow:bool,待处理的行是否新增行。只读。
Keys:OrderedDictionary,要删除行的主键栏位值。只读。
NewValues: OrderedDictionary,要删除行的非主键(实际上是所有栏位)栏位新值。只读。
OldValues: OrderedDictionary,要删除行的非主键(实际上是所有栏位)栏位原值。只读。
RowError:string,行错误信息。可读写。
通常在RowValidating事件中检查栏位值是否有效,如果无效,应抛出异常。
例:
//行数据检验事件
protected void ASPxGridView1_RowValidating(object sender, DevExpress.Web.Data.ASPxDataValidationEventArgs e)
{
//是否新增行
if (e.IsNewRow)
{
if (e.NewValues["Event"] == null)
{
e.Errors.Add(this.ASPxGridView1.Columns["Event"], "事件名称不可为空");
e.RowError = "事件名称不可为空";
throw new Exception("事件名称不可为空");
}
}
}
通常在HtmlRowPrepared事件中检查行是否有效并以不同的颜色来显示未通过校验的行。
通常在StartRowEditing事件中调用DoRowValidation方法触发数据校验。
以下是官方的示例代码:
using DevExpress.Web.ASPxGridView;
using System.Collections.Generic;
protected void grid_RowValidating(object sender,
DevExpress.Web.Data.ASPxDataValidationEventArgs e) {
// Checks for null values.
foreach (GridViewColumn column in grid.Columns) {
GridViewDataColumn dataColumn = column as GridViewDataColumn;
if (dataColumn == null) continue;
if (e.NewValues[dataColumn.FieldName] == null)
e.Errors[dataColumn] = "Value cannot be null.";
}
// Displays the error row if there is at least one error.
if (e.Errors.Count > 0) e.RowError = "Please, fill all fields.";
if (e.NewValues["ContactName"] != null &&
e.NewValues["ContactName"].ToString().Length < 2) {
AddError(e.Errors, grid.Columns["ContactName"],
"Contact Name must be at least two characters long.");
}
if (e.NewValues["CompanyName"] != null &&
e.NewValues["CompanyName"].ToString().Length < 2) {
AddError(e.Errors, grid.Columns["CompanyName"],
"Company Name must be at least two characters long.");
}
if (string.IsNullOrEmpty(e.RowError) && e.Errors.Count > 0)
e.RowError = "Please, correct all errors.";
}
void AddError(Dictionary<GridViewColumn, string > errors,
GridViewColumn column, string errorText) {
if(errors.ContainsKey(column)) return;
errors[column] = errorText;
}
protected void grid_HtmlRowPrepared(object sender,
ASPxGridViewTableRowEventArgs e) {
// Checks whether the generated row has the errors.
bool hasError = e.GetValue("ContactName").ToString().Length <= 1;
hasError = hasError || e.GetValue("CompanyName").ToString().Length <= 1;
hasError = hasError || e.GetValue("Country") == null;
// If the row has the error(s), its text color is set to red.
if (hasError)
e.Row.ForeColor = System.Drawing.Color.Red;
}
protected void grid_StartRowEditing(object sender,
DevExpress.Web.Data.ASPxStartRowEditingEventArgs e) {
// Validates the edited row if it isn't a new row,.
if (!grid.IsNewRowEditing)
grid.DoRowValidation();
}