Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/Silverlight/CS/GridDemo/Modules/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/Silverlight/CS/GridDemo/Modules/Validation.xaml.cs

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;
        }
    }
}