Mini Kabibi Habibi

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

Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports DevExpress.Xpf.Grid
Imports System.Globalization
Imports GridDemo
Imports DevExpress.Xpf.DemoBase
Imports DevExpress.Xpf.DemoBase.NWind
Imports DataView = System.Collections.Generic.List(Of DevExpress.Xpf.DemoBase.NWind.OrderDetails)
Imports DataRowView = DevExpress.Xpf.DemoBase.NWind.OrderDetails
Imports DataRow = DevExpress.Xpf.DemoBase.NWind.OrderDetails
Imports DevExpress.Xpf.Core
Imports DevExpress.Data.Browsing

Namespace GridDemo
	<CodeFile("ModuleResources/ValidationClasses.(cs)")> _
	Partial Public Class Validation
		Inherits GridDemoModule
		Private dataView As DataView
		Public Sub New()
			InitializeComponent()
			dataView = TryCast(NWindData.OrderDetailsNew, List(Of OrderDetails))
			grid.ItemsSource = dataView
			AddHandler unitPriceConditionListBox.EditValueChanged, AddressOf validationComboBox_SelectionChanged
			AddHandler quantityConditionListBox.EditValueChanged, AddressOf validationComboBox_SelectionChanged
			AddHandler discountConditionListBox.EditValueChanged, AddressOf validationComboBox_SelectionChanged
			UpdateErrors()
		End Sub
		Private Function GetSubTotal(ByVal row As DataRowView) As Decimal
			Dim price As Object = row.UnitPrice
			Dim quantity As Object = row.Quantity
			Dim discount As Object = row.Discount
			If price IsNot Nothing AndAlso quantity IsNot Nothing AndAlso discount IsNot Nothing Then
				Return Convert.ToDecimal(price) * Convert.ToInt32(quantity) * (1 - Convert.ToDecimal(discount))
			End If
			Return 0
		End Function
		Private Sub view_ValidateRow(ByVal sender As Object, ByVal e As GridRowValidationEventArgs)
			UpdateRowErrors(GetRow(CType(e.Row, DataRowView)))
			Dim subTotal As Decimal = GetSubTotal(CType(e.Row, DataRowView))
			If subTotal < 0 Then
				e.SetError("The SubTotal value must be greater than or equal to 0.")
			End If
		End Sub
		Private Sub colUnitPrice_Validate(ByVal sender As Object, ByVal e As GridCellValidationEventArgs)
			DoValidation(e, CType(unitPriceConditionListBox.SelectedItem, ValidationRule))
		End Sub
		Private Sub colQuantity_Validate(ByVal sender As Object, ByVal e As GridCellValidationEventArgs)
			DoValidation(e, CType(quantityConditionListBox.SelectedItem, ValidationRule))
		End Sub
		Private Sub colDiscount_Validate(ByVal sender As Object, ByVal e As GridCellValidationEventArgs)
			DoValidation(e, CType(discountConditionListBox.SelectedItem, ValidationRule))
		End Sub
		Private Sub DoValidation(ByVal e As GridCellValidationEventArgs, ByVal rule As ValidationRule)
			Dim result As ValidationResult = rule.Validate(e.Value, e.Culture)
			If (Not result.IsValid) Then
				e.SetError(result.ErrorContent)
			End If
		End Sub

		Private Sub validationComboBox_SelectionChanged(ByVal sender As Object, ByVal e As DevExpress.Xpf.Editors.EditValueChangedEventArgs)
			UpdateErrors()
		End Sub
		Private Sub UpdateErrors()
			grid.BeginDataUpdate()
			Try
				For Each row As DataRow In dataView
					UpdateRowErrors(row)
				Next row
			Finally
				grid.EndDataUpdate()
			End Try
		End Sub
		Private Sub UpdateRowErrors(ByVal row As DataRow)
			UpdateColumnError(row, "UnitPrice", CType(unitPriceConditionListBox.SelectedItem, ValidationRule))
			UpdateColumnError(row, "Quantity", CType(quantityConditionListBox.SelectedItem, ValidationRule))
			UpdateColumnError(row, "Discount", CType(discountConditionListBox.SelectedItem, ValidationRule))
		End Sub
		Private Sub UpdateColumnError(ByVal row As DataRow, ByVal columnName As String, ByVal rule As ValidationRule)
			Dim value As Object = TypeDescriptor.GetProperties(row)(columnName).GetValue(row)
			Dim result As ValidationResult = rule.Validate(value, CultureInfo.CurrentCulture)
			If result.IsValid Then
				row.SetColumnError(columnName, String.Empty)
			Else
				row.SetColumnError(columnName, result.ErrorContent.ToString())
			End If
		End Sub
		Private Sub view_CellUpdated(ByVal sender As Object, ByVal e As CellValueChangedEventArgs)
			UpdateRowErrors(GetRow(CType(e.Row, DataRowView)))
		End Sub
		Private Sub view_RowCanceled(ByVal sender As Object, ByVal e As RowEventArgs)
			UpdateRowErrors(GetRow(CType(e.Row, DataRowView)))
		End Sub
		Private Function GetRow(ByVal rowView As DataRowView) As DataRow
			Return rowView
		End Function
	End Class
End Namespace