How to: Validate Cell Editors
- 3 minutes to read
This example shows how to validate the focused cell's value. In this example, the product's price can be reduced by 30% if the product is discontinued.
<Window x:Class="DXGrid_ValidatingEditors.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
Title="Window1" Height="300" Width="600">
<Grid>
<dxg:GridControl x:Name="grid" ItemsSource="{Binding ProductList}">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="ProductName">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings AllowNullInput="False" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn FieldName="UnitPrice" Validate="GridColumn_Validate">
<dxg:GridColumn.EditSettings>
<dxe:SpinEditSettings DisplayFormat="c2" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn FieldName="Discontinued" />
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AutoWidth="True" HiddenEditor="TableView_HiddenEditor" />
</dxg:GridControl.View>
</dxg:GridControl>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
using DevExpress.Xpf.Grid;
using System.Collections.ObjectModel;
namespace DXGrid_ValidatingEditors {
public partial class Window1 : Window {
public Window1() {
InitializeComponent();
this.DataContext = new MyViewModel();
}
private void GridColumn_Validate(object sender, GridCellValidationEventArgs e) {
bool discontinued = ((Product)e.Row).Discontinued;
if (discontinued) {
double discount = 100 - (Convert.ToDouble(e.Value) * 100) /
Convert.ToDouble(e.CellValue);
if (!(discount > 0 && discount <= 30)) {
e.IsValid = false;
e.ErrorType = DevExpress.XtraEditors.DXErrorProvider.ErrorType.Critical;
if (discount < 0) {
e.ErrorContent = string.Format("The price cannot be greater than ${0}",
Convert.ToDouble(e.CellValue));
return;
}
e.ErrorContent = string.Format(
"The discount cannot be greater than 30% (${0}). Please correct the price.",
Convert.ToDouble(e.CellValue)*0.7);
}
}
}
private void TableView_HiddenEditor(object sender, EditorEventArgs e) {
if (e.Column.FieldName != "Discontinued") return;
grid.View.CommitEditing();
}
}
public class MyViewModel {
public MyViewModel() {
CreateList();
}
public ObservableCollection<Product> ProductList { get; set; }
void CreateList() {
ProductList = new ObservableCollection<Product>();
Random r = new Random();
for (int i = 0; i < 20; i++) {
Product p = new Product(i);
p.UnitPrice = r.Next(1, 50);
ProductList.Add(p);
}
}
}
public class Product {
public Product(int i) {
ProductName = "Product" + i;
Discontinued = i % 5 == 0;
}
public string ProductName { get; set; }
public int UnitPrice { get; set; }
public bool Discontinued { get; set; }
}
}