Mini Kabibi Habibi
using System;
using System.Collections.Generic;
using DevExpress.Xpf.Grid;
using System.Globalization;
using GridDemo;
using DevExpress.Xpf.DemoBase;
using DevExpress.Xpf.DemoBase.NWind;
using DataView = System.Collections.Generic.List<DevExpress.Xpf.DemoBase.NWind.OrderDetails>;
using DataRowView = DevExpress.Xpf.DemoBase.NWind.OrderDetails;
using DataRow = DevExpress.Xpf.DemoBase.NWind.OrderDetails;
using DevExpress.Xpf.Core;
using DevExpress.Data.Browsing;
namespace GridDemo {
[CodeFile("ModuleResources/ValidationClasses.(cs)")]
public partial class Validation : GridDemoModule {
DataView dataView;
public Validation() {
InitializeComponent();
dataView = NWindData.OrderDetailsNew as List<OrderDetails>;
grid.ItemsSource = dataView;
unitPriceConditionListBox.EditValueChanged += new DevExpress.Xpf.Editors.EditValueChangedEventHandler(validationComboBox_SelectionChanged);
quantityConditionListBox.EditValueChanged += new DevExpress.Xpf.Editors.EditValueChangedEventHandler(validationComboBox_SelectionChanged);
discountConditionListBox.EditValueChanged += new DevExpress.Xpf.Editors.EditValueChangedEventHandler(validationComboBox_SelectionChanged);
UpdateErrors();
}
decimal GetSubTotal(DataRowView row) {
object price = row.UnitPrice;
object quantity = row.Quantity;
object discount = row.Discount;
if(price != null && quantity != null && discount != null) {
return Convert.ToDecimal(price) * Convert.ToInt32(quantity) * (1 - Convert.ToDecimal(discount));
}
return 0;
}
private void view_ValidateRow(object sender, GridRowValidationEventArgs e) {
UpdateRowErrors(GetRow((DataRowView)e.Row));
decimal subTotal = GetSubTotal((DataRowView)e.Row);
if(subTotal < 0)
e.SetError("The SubTotal value must be greater than or equal to 0.");
}
private void colUnitPrice_Validate(object sender, GridCellValidationEventArgs e) {
DoValidation(e, (ValidationRule)unitPriceConditionListBox.SelectedItem);
}
private void colQuantity_Validate(object sender, GridCellValidationEventArgs e) {
DoValidation(e, (ValidationRule)quantityConditionListBox.SelectedItem);
}
private void colDiscount_Validate(object sender, GridCellValidationEventArgs e) {
DoValidation(e, (ValidationRule)discountConditionListBox.SelectedItem);
}
void DoValidation(GridCellValidationEventArgs e, ValidationRule rule) {
ValidationResult result = rule.Validate(e.Value, e.Culture);
if(!result.IsValid) {
e.SetError(result.ErrorContent);
}
}
private void validationComboBox_SelectionChanged(object sender, DevExpress.Xpf.Editors.EditValueChangedEventArgs e) {
UpdateErrors();
}
void UpdateErrors() {
grid.BeginDataUpdate();
try {
foreach(DataRow row in dataView) {
UpdateRowErrors(row);
}
} finally {
grid.EndDataUpdate();
}
}
void UpdateRowErrors(DataRow row) {
UpdateColumnError(row, "UnitPrice", (ValidationRule)unitPriceConditionListBox.SelectedItem);
UpdateColumnError(row, "Quantity", (ValidationRule)quantityConditionListBox.SelectedItem);
UpdateColumnError(row, "Discount", (ValidationRule)discountConditionListBox.SelectedItem);
}
void UpdateColumnError(DataRow row, string columnName, ValidationRule rule) {
object value = TypeDescriptor.GetProperties(row)[columnName].GetValue(row);
ValidationResult result = rule.Validate(value, CultureInfo.CurrentCulture);
if(result.IsValid)
row.SetColumnError(columnName, string.Empty);
else
row.SetColumnError(columnName, result.ErrorContent.ToString());
}
void view_CellUpdated(object sender, CellValueChangedEventArgs e) {
UpdateRowErrors(GetRow((DataRowView)e.Row));
}
void view_RowCanceled(object sender, RowEventArgs e) {
UpdateRowErrors(GetRow((DataRowView)e.Row));
}
DataRow GetRow(DataRowView rowView) {
return rowView;
}
}
}