This example illustrates how to implement custom date validation in Batch Edit mode:
1) The ASPxClientGridView.BatchEditRowValidating event is used to check values on the client.
2) The ASPxGridView.RowValidating event is used to check values on the server.
3) The GridViewBatchEditSettings.AllowValidationOnEndEdit property allows switching validation modes on the client side.
If the variation between the HireDate and BirthDate columns is less than 18, inputted data is invalid and data update is not allowed.
Question Comments
Added By: Irfan Khadrani at: 4/8/2016 8:46:05 AM Thank you for the reply.
But I face on issue while using BatchEditRowValidating
[C#]@usingWellsFargo.Framework;@usingWellsFargo.Framework.Enums;@usingWellsFargo.LFM.Domain;@modelWellsFargo.LFM.Models.HFFundHistoryModel@{vargrid=Html.DevExpress().GridView(settings=>{settings.KeyboardSupport=false;settings.SettingsBehavior.EnableRowHotTrack=false;settings.Settings.ShowTitlePanel=true;//Enable right click Export functionalitysettings.SettingsContextMenu.Enabled=true;settings.SettingsContextMenu.RowMenuItemVisibility.DeleteRow=false;settings.SettingsContextMenu.RowMenuItemVisibility.EditRow=false;settings.SettingsContextMenu.RowMenuItemVisibility.NewRow=false;settings.SettingsContextMenu.RowMenuItemVisibility.Refresh=false;settings.FillContextMenuItems=(sender,e)=>{if(e.MenuType==GridViewContextMenuType.Rows){varitem=e.CreateItem("Export List","Export");item.BeginGroup=true;e.Items.Insert(e.Items.IndexOfCommand(GridViewContextMenuCommand.Refresh),item);item.Items.Add("PDF","PDF",null,DevExpressHelper.GetUrl(new{Controller="FundHistory",Action="ExportHF",type="PDF",fundId=ViewData["FundId"],fundTypeId=ViewData["fundTypeId"]}));item.Items.Add("XLSX","XLSX",null,DevExpressHelper.GetUrl(new{Controller="FundHistory",Action="ExportHF",type="XLSX",fundId=ViewData["FundId"],fundTypeId=ViewData["fundTypeId"]}));}};settings.Name="HFHistoriesByFundIdGrid";settings.CallbackRouteValues=new{Controller="FundHistory",Action="HFFinancialHistoryGridPartialView",FundId=ViewData["FundId"]};settings.CustomJSProperties+=(s,e)=>{if(ViewData["jsonExceptions"]!=null){e.Properties["cp_exceptions"]=ViewData["jsonExceptions"];}if(ViewData["jsonExceptionsWarnings"]!=null){e.Properties["cp_warnings"]=ViewData["jsonExceptionsWarnings"];}};settings.HtmlDataCellPrepared=(s,e)=>{if((e.DataColumn.FieldName=="AsOfYr")&&(e.DataColumn.FieldName=="AsOfMonth"))return;if(Convert.ToDecimal(e.CellValue)< 0){e.Cell.ForeColor=System.Drawing.Color.Red;}};settings.InitNewRow=(s,e)=>{e.NewValues["AuditReceived"]=false;e.NewValues["Redemption"]= 0;e.NewValues["Subscription"]= 0;};settings.Width=System.Web.UI.WebControls.Unit.Percentage(100);settings.SettingsEditing.BatchUpdateRouteValues=new{Controller="FundHistory",Action="HFUpdateBatch",fundId=ViewData["FundId"]};settings.SettingsEditing.BatchEditSettings.ShowConfirmOnLosingChanges=false;settings.SettingsPager.Visible=true;settings.SettingsPager.PageSize= 100;settings.SettingsPager.Mode=GridViewPagerMode.ShowPager;settings.SettingsPager.PageSizeItemSettings.Visible=true;settings.SettingsPager.PageSizeItemSettings.Items=newString[]{"100","200","300","500"};settings.Settings.VerticalScrollBarMode=ScrollBarMode.Auto;// If VerticalScrollbarMode is used column/table width need to be explicitly setsettings.Settings.HorizontalScrollBarMode=ScrollBarMode.Auto;settings.Settings.ShowFilterRow=false;settings.Settings.ShowHeaderFilterButton=false;settings.Settings.ShowFilterRowMenu=false;settings.SettingsBehavior.AllowSort=false;settings.SettingsBehavior.ColumnResizeMode=ColumnResizeMode.Control;settings.SettingsBehavior.AllowDragDrop=true;settings.SettingsBehavior.AutoExpandAllGroups=false;settings.KeyFieldName="FundHistoryId";settings.EnablePagingCallbackAnimation=false;settings.SettingsLoadingPanel.Mode=GridViewLoadingPanelMode.Disabled;settings.Styles.AlternatingRow.Enabled=DefaultBoolean.True;settings.Styles.Row.Font.Size= 8;settings.Styles.Header.Font.Size= 9;settings.Styles.EditingErrorRow.Font.Size= 8;settings.SetStatusBarTemplateContent(c=>{@Html.DevExpress().Button(buttonSettings=>{buttonSettings.Name="buttonCancel";buttonSettings.Text="Cancel Changes";buttonSettings.RenderMode=ButtonRenderMode.Button;buttonSettings.Style.Add("float","right");buttonSettings.Style.Add("padding","0px 2px");buttonSettings.ClientSideEvents.Click="HFCancelHistoryBatch";buttonSettings.UseSubmitBehavior=false;buttonSettings.Height= 26;}).GetHtml();@Html.DevExpress().Button(buttonSettings=>{buttonSettings.Name="buttonSave";buttonSettings.Text="Save Changes";buttonSettings.RenderMode=ButtonRenderMode.Button;buttonSettings.Style.Add("float","right");buttonSettings.Style.Add("padding","0px 2px");buttonSettings.ClientSideEvents.Click="HFSaveHistoryBatch";buttonSettings.UseSubmitBehavior=false;buttonSettings.Height= 26;}).GetHtml();});settings.ClientSideEvents.BatchEditStartEditing="HFBatchStartEdit";settings.ClientSideEvents.BatchEditEndEditing="HFBatchEndEdit";settings.ClientSideEvents.Init="HFInitHistory";settings.ClientSideEvents.BeginCallback="HFBeginCallback";settings.ClientSideEvents.EndCallback="HFEndHistoryCallback";settings.SettingsEditing.Mode=GridViewEditingMode.Batch;settings.SettingsEditing.BatchEditSettings.EditMode=GridViewBatchEditMode.Cell;settings.Columns.Add(column=>{column.Name="commandColumn";column.EditFormSettings.Visible=DevExpress.Utils.DefaultBoolean.False;column.Width=Unit.Pixel(50);column.SetDataItemTemplateContent(c=>{Html.DevExpress().HyperLink(settingsLink=>{settingsLink.Name="lnkDelete"+c.VisibleIndex;settingsLink.Properties.Text="Delete";settingsLink.NavigateUrl="javascript:";settingsLink.Properties.ClientSideEvents.Click="function(s, e) {{ HFDeleteByIndex(HFGetVisibleIndex()); }}";}).Render();});});settings.Columns.Add(column=>{column.FieldName="AsOfYr";column.Caption="Year";column.Name="Year";column.ColumnType=MVCxGridViewColumnType.SpinEdit;varspProperties=column.PropertiesEditasSpinEditProperties;spProperties.ShowOutOfRangeWarning=true;spProperties.MinValue= 1900;spProperties.MaxValue=DateTime.Now.Year+ 1;spProperties.Width=Unit.Percentage(100);spProperties.ValidationSettings.RequiredField.IsRequired=true;spProperties.ValidationSettings.CausesValidation=true;column.Width=System.Web.UI.WebControls.Unit.Pixel(80);});settings.Columns.Add(column=>{column.FieldName="AsOfMonth";column.Caption="Month";column.Name="Month";column.ColumnType=MVCxGridViewColumnType.ComboBox;varcomboboxProperties=column.PropertiesEditasComboBoxProperties;comboboxProperties.DataSource=Model.Months;comboboxProperties.TextField="Value";comboboxProperties.ValueField="Key";comboboxProperties.ValueType=typeof(string);comboboxProperties.ValidationSettings.RequiredField.IsRequired=true;comboboxProperties.ValidationSettings.CausesValidation=true;comboboxProperties.IncrementalFilteringMode=IncrementalFilteringMode.Contains;comboboxProperties.Width=Unit.Pixel(80);comboboxProperties.ClientSideEvents.KeyDown="DropDownKeyDown";comboboxProperties.ClientSideEvents.ValueChanged="DropDownValueChanged";column.Settings.SortMode=DevExpress.XtraGrid.ColumnSortMode.DisplayText;column.Width=System.Web.UI.WebControls.Unit.Pixel(100);});settings.Columns.Add(column=>{column.FieldName="AuditReceived";column.Caption="Audit";column.Name="Audit";column.ColumnType=MVCxGridViewColumnType.ComboBox;varcomboboxProperties=column.PropertiesEditasComboBoxProperties;vardatasource=newDictionary<bool,string>();datasource.Add(true,"YES");datasource.Add(false,"NO");comboboxProperties.DataSource=datasource;//comboboxProperties.DataSource = Model.AuditOptions;comboboxProperties.TextField="Value";comboboxProperties.ValueField="Key";comboboxProperties.ValueType=typeof(string);comboboxProperties.ValidationSettings.RequiredField.IsRequired=true;comboboxProperties.ValidationSettings.CausesValidation=true;comboboxProperties.IncrementalFilteringMode=IncrementalFilteringMode.Contains;comboboxProperties.Width=Unit.Pixel(80);comboboxProperties.ClientSideEvents.KeyDown="DropDownKeyDown";comboboxProperties.ClientSideEvents.ValueChanged="DropDownValueChanged";column.Settings.SortMode=DevExpress.XtraGrid.ColumnSortMode.DisplayText;column.Width=System.Web.UI.WebControls.Unit.Pixel(80);});settings.Columns.Add(column=>{column.FieldName="NetAsset";column.Caption="Net Asset ($ millions)";column.Name="Net Asset";column.ColumnType=MVCxGridViewColumnType.SpinEdit;varprop=(SpinEditProperties)column.PropertiesEdit;//prop.ValidationSettings.RequiredField.IsRequired = true;//prop.ValidationSettings.CausesValidation = true;prop.SpinButtons.ShowIncrementButtons=false;prop.DisplayFormatInEditMode=true;prop.DecimalPlaces= 5;prop.MinValue= 0;prop.MaxValue=decimal.MaxValue;column.PropertiesEdit.DisplayFormatString="{0:C1}";column.Width=System.Web.UI.WebControls.Unit.Pixel(100);column.HeaderStyle.Wrap=DefaultBoolean.True;column.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;});settings.Columns.Add(column=>{column.FieldName="Subscription";column.Caption="Subscription ($ millions)";column.Name="Subscription";column.ColumnType=MVCxGridViewColumnType.SpinEdit;column.Width=System.Web.UI.WebControls.Unit.Pixel(100);varprop=(SpinEditProperties)column.PropertiesEdit;prop.DisplayFormatInEditMode=true;prop.SpinButtons.ShowIncrementButtons=false;prop.DecimalPlaces= 5;prop.MinValue= 0;prop.MaxValue=decimal.MaxValue;column.PropertiesEdit.DisplayFormatString="{0:C1}";column.HeaderStyle.Wrap=DefaultBoolean.True;column.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;});settings.Columns.Add(column=>{column.FieldName="Redemption";column.Caption="Redemption ($ millions)";column.Name="Redemption";column.ColumnType=MVCxGridViewColumnType.SpinEdit;varprop=(SpinEditProperties)column.PropertiesEdit;prop.SpinButtons.ShowIncrementButtons=false;prop.DisplayFormatInEditMode=true;prop.DecimalPlaces= 5;prop.MinValue= 0;prop.MaxValue=decimal.MaxValue;column.PropertiesEdit.DisplayFormatString="{0:C1}";column.Width=System.Web.UI.WebControls.Unit.Pixel(100);column.HeaderStyle.Wrap=DefaultBoolean.True;column.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;});settings.Columns.Add(column=>{column.FieldName="NAVPerShare";column.Caption="NAV per Share ($ per share)";column.Name="NAV per Share";column.ColumnType=MVCxGridViewColumnType.SpinEdit;varprop=(SpinEditProperties)column.PropertiesEdit;prop.ValidationSettings.RequiredField.IsRequired=false;prop.ValidationSettings.CausesValidation=false;prop.SpinButtons.ShowIncrementButtons=false;prop.DisplayFormatInEditMode=true;prop.DecimalPlaces= 5;prop.MinValue= 0;prop.MaxValue=decimal.MaxValue;column.PropertiesEdit.DisplayFormatString="{0:C1}";column.Width=System.Web.UI.WebControls.Unit.Pixel(100);column.HeaderStyle.Wrap=DefaultBoolean.True;column.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;});settings.Columns.Add(column=>{column.FieldName="MonthlyReturn";column.Caption="Monthly Return (%)";column.Name="Monthly Return";column.ColumnType=MVCxGridViewColumnType.SpinEdit;varprop=(SpinEditProperties)column.PropertiesEdit;prop.ValidationSettings.RequiredField.IsRequired=true;prop.ValidationSettings.CausesValidation=true;prop.SpinButtons.ShowIncrementButtons=false;prop.DisplayFormatInEditMode=true;prop.DecimalPlaces= 2;column.PropertiesEdit.DisplayFormatString="{0:n2}%";column.Width=System.Web.UI.WebControls.Unit.Pixel(125);});settings.Columns.Add(column=>{column.FieldName="YTD";column.Caption="YTD Return (%)";column.Name="YTD Return";column.ColumnType=MVCxGridViewColumnType.SpinEdit;varprop=(SpinEditProperties)column.PropertiesEdit;prop.ValidationSettings.CausesValidation=true;prop.SpinButtons.ShowIncrementButtons=false;prop.DisplayFormatInEditMode=true;prop.DecimalPlaces= 2;column.PropertiesEdit.DisplayFormatString="{0:n2}%";column.Width=System.Web.UI.WebControls.Unit.Pixel(110);});settings.Columns.Add(column=>{column.FieldName="MonthlyEarning";column.Caption="Monthly P&L ($ millions)";column.Name="Monthly P&L";column.ColumnType=MVCxGridViewColumnType.SpinEdit;varprop=(SpinEditProperties)column.PropertiesEdit;prop.SpinButtons.ShowIncrementButtons=false;prop.DisplayFormatInEditMode=true;prop.DecimalPlaces= 5;column.PropertiesEdit.DisplayFormatString="{0:C1}";column.Width=System.Web.UI.WebControls.Unit.Pixel(110);column.HeaderStyle.Wrap=DefaultBoolean.True;column.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;});settings.Columns.Add(column=>{column.FieldName="YTDEarning";column.Caption="YTD P&L ($ millions)";column.Name="YTD P&L";column.ColumnType=MVCxGridViewColumnType.SpinEdit;varprop=(SpinEditProperties)column.PropertiesEdit;prop.SpinButtons.ShowIncrementButtons=false;prop.DisplayFormatInEditMode=true;prop.DecimalPlaces= 5;column.PropertiesEdit.DisplayFormatString="{0:C1}";column.Width=System.Web.UI.WebControls.Unit.Pixel(110);column.HeaderStyle.Wrap=DefaultBoolean.True;column.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;});varlastNameChecked=string.Empty;NAVLimitItemlimitChecked=newNAVLimitItem();varlimitList=Model.Limits.ToList();for(varindex= 0;index<limitList.Count();index++){varlimit=limitList[index];vareventFrequencyName=((EventFrequencyEnum)limit.eventFrequencyId).ToString();varcalcDurationName=WellsFargo.Framework.StringEnumValue.GetStringValue((CalculationDurationEnum)limit.calculationDurationId);varnetAssetTypeName=WellsFargo.Framework.StringEnumValue.GetStringValue((FundNavTypeEnum)limit.navTypeId);varnavEventTypeName=WellsFargo.Framework.StringEnumValue.GetStringValue((NavEventTypeEnum)limit.navEventTypeId);varcolCaption=string.Format("{0} {1} - {2} {3} (%)",netAssetTypeName,eventFrequencyName,calcDurationName,navEventTypeName);varcol=settings.Columns.Add(limit.limitId.ToString(),colCaption);col.HeaderStyle.Wrap=DefaultBoolean.True;col.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;col.PropertiesEdit.DisplayFormatString="{0:n2}%";col.UnboundType=DevExpress.Data.UnboundColumnType.Decimal;col.CellStyle.BackColor=System.Drawing.Color.Gainsboro;col.EditFormSettings.Visible=DefaultBoolean.False;col.Width=Unit.Pixel(180);}settings.CustomUnboundColumnData=(sender,e)=>{if(!e.Column.FieldName.Equals(lastNameChecked)){lastNameChecked=e.Column.FieldName;limitChecked=limitList.Where(t=>t.limitId.ToString().Equals(e.Column.FieldName)).First();}e.Value=Html.GetLimitPercentageChange(Model.Items,Model.Fund,e.ListSourceRowIndex,limitChecked);};settings.Columns.Add(column=>{column.FieldName="NAVPerShare_HistoryId";column.Width=Unit.Pixel(0);column.Name="hidden";});settings.Columns.Add(column=>{column.FieldName="NetAsset_HistoryId";column.Width=Unit.Pixel(0);column.Name="hidden";});settings.Columns.Add(column=>{column.FieldName="Subscription_HistoryId";column.Width=Unit.Pixel(0);column.Name="hidden";});settings.Columns.Add(column=>{column.FieldName="Redemption_HistoryId";column.Width=Unit.Pixel(0);column.Name="hidden";});settings.Columns.Add(column=>{column.FieldName="MonthlyReturn_HistoryId";column.Width=Unit.Pixel(0);column.Name="hidden";});settings.Columns.Add(column=>{column.FieldName="YTDEarning_HistoryId";column.Width=Unit.Pixel(0);column.Name="hidden";});settings.Columns.Add(column=>{column.FieldName="MonthlyEarning_HistoryId";column.Width=Unit.Pixel(0);column.Name="hidden";});settings.CustomColumnDisplayText=(s,e)=>{if(e.Column.FieldName.Equals("YTDEarning")||e.Column.FieldName.Equals("MonthlyEarning")){System.Globalization.CultureInfoculture=(System.Globalization.CultureInfo)System.Globalization.CultureInfo.CurrentCulture.Clone();culture.NumberFormat.CurrencyNegativePattern= 1;e.DisplayText=string.Format(culture,"{0:C1}",e.Value);}};});if(ViewData["EditError"]!=null){grid.SetEditErrorText((string)ViewData["EditError"]);}}@grid.Bind(Model.Items).GetHtml()<divid="HFchangesDialog"class="confirmChangesDiv"title="Confirm Changes"><fieldset><legend>NewAndEditedValues</legend><divclass="tableContainer"><tableid="newEditedTable"><thead><tr><th>Type</th><th>Year</th><th>Month</th><th>Column</th><th>CurrentValue</th><th>ProposedValue</th></tr></thead><tbody></tbody></table></div></fieldset><fieldsetid="deletedReturnHistories"><legend>DeletedValues</legend><divclass="tableContainer"><tableid="deletedTable"><thead><tr><th>Year</th><th>Month</th><th>Audit</th><th>NetAsset</th><th>Subscription</th><th>Redemption</th><th>NAVperShare</th><th>MonthlyReturn</th><th>YTDReturn</th><th>MonthlyP&L</th><th>YTDP&L</th></tr></thead><tbody></tbody></table></div></fieldset>@{if((FundStatusEnum)Model.Fund.StatusId==FundStatusEnum.Inactive){<p><spanstyle="color:red">NOTE:</span>Exceptionswillnotbeevaluatedbecause@Model.Fund.Nameiscurrentlysetto:INACTIVE</p>}}</div><divid="HFvalidationDialog"class="confirmChangesDiv"title="Duplicated Values"><divclass="tableContainer"><tableid="repeatedTable"><thead><tr><th>Type</th><th>Year</th><th>Month</th></tr></thead><tbody></tbody></table></div></div><divid="HFExceptionsDialog"class="confirmChangesDiv"title="Potential Exceptions"><fieldset><legend>Thefollowingexceptionswillbegenerated</legend><divclass="tableContainer"><tableid="exceptionsTable"><thead><tr><th>Fund</th><th>NavType</th><th>NavEvent</th><th>Frequency</th><th>LimitValue</th><th>BreachValue</th><th>BreachMonth</th><th>BreachYear</th></tr></thead><tbody></tbody></table></div></fieldset></div>
event. It does not allow me to edit any of my grid cells.
Please find below the code partial view.