/// <summary> /// Validates a grid row /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tableViewDetail_ValidateRow(object sender, DevExpress.Xpf.Grid.GridRowValidationEventArgs e) { WaterMeterViewModel vm = this.DataContext as WaterMeterViewModel; WaterMeterReading row = e.Row as WaterMeterReading; try { if (null != row) { // Rule-1: All required fields must contain data string results = ValidationRules.IsWaterMeterReadingRowValid((WaterMeterReading)e.Row); if (!String.IsNullOrEmpty(results)) { e.IsValid = false; e.ErrorType = DevExpress.XtraEditors.DXErrorProvider.ErrorType.Critical; e.ErrorContent = "The highlighted field cannot be blank"; e.SetError(e.ErrorContent); return; } // Rule-2: Meter Reading must be greater than previous reading. //if (row.ReadingDate <= vm.SelectedProperty.LastMeterEntry.ReadingDate || // row.MeterReading <= vm.SelectedProperty.LastMeterEntry.MeterReading) if (row.ReadingDate <= vm.SelectedProperty.ReadingDate || row.MeterReading <= vm.SelectedProperty.MeterReading) { e.IsValid = false; e.ErrorType = DevExpress.XtraEditors.DXErrorProvider.ErrorType.Critical; e.ErrorContent = "The highlighted field cannot be less then the previous reading"; e.SetError(e.ErrorContent); return; } } } catch (Exception ex) { MessageBox.Show("Row Error: " + ex.Message); } finally { if (e.IsValid) { //row.Consumption = vm.CalculateWaterConsumption(); //row.PropertyID = vm.SelectedProperty.PropertyID; // assign the PropertID since it's a FK } e.Handled = true; } }