namespace SWMVCComponents.HtmlHelperExtensions { public static class HtmlHelperGridExtension { public static SWGridViewExtension SWGrid(this HtmlHelper htmlHelper, IGridContainer gridContainer) { var gridModel = gridContainer.GridModel; void setSettings(SWGridViewSettings settings) { var s = settings.DVGridViewSettings; s.KeyFieldName = gridModel.KeyFieldName; s.Name = gridModel.GridName; s.CallbackRouteValues = gridModel.CallbackRouteValues; settings.SWGridMetaSettings = gridModel.SWGridMetaSettings; s.Width = gridModel.Width; s.DataBound = gridModel.DataBound; s.SettingsLoadingPanel.Mode = gridModel.ShowLoadingPanel ? GridViewLoadingPanelMode.Default : GridViewLoadingPanelMode.Disabled; s.Settings.VerticalScrollableHeight = gridModel.VerticalScrollableHeight; s.Settings.VerticalScrollBarMode = gridModel.VerticalScrollBarMode; s.Settings.HorizontalScrollBarMode = gridModel.HorizontalScrollBarMode; s.SettingsBehavior.AllowFocusedRow = gridModel.AllowFocusedRow; s.SettingsPager.PageSize = gridModel.PageSize; s.SettingsPopup.EditForm.SettingsAdaptivity.Mode = gridModel.SettingsPopup.EditForm.SettingsAdaptivity.Mode; s.SettingsPopup.EditForm.SettingsAdaptivity.SwitchAtWindowInnerWidth = gridModel.SettingsPopup.EditForm.SettingsAdaptivity.SwitchAtWindowInnerWidth; gridModel.ClientEndCallbacks.ToList().ForEach(clientEvent => { if (!settings.ClientEndCallbacks.ContainsKey(clientEvent.Key)) settings.ClientEndCallbacks.Add(clientEvent.Key, clientEvent.Value); }); gridModel.ClientFocusedRowChanged.ToList().ForEach(clientEvent => { if (!settings.ClientFocusedRowChanged.ContainsKey(clientEvent.Key)) settings.ClientFocusedRowChanged.Add(clientEvent.Key, clientEvent.Value); }); gridModel.BatchEditEndEditing.ToList().ForEach(clientEvent => { if (!settings.BatchEditEndEditing.ContainsKey(clientEvent.Key)) settings.BatchEditEndEditing.Add(clientEvent.Key, clientEvent.Value); }); s.SettingsBehavior.AllowEllipsisInText = true; settings.SWGrid = gridModel.SWGrid; settings.ColumnsWidth = gridModel.ColumnsWidth; settings.AllowAutoFocus = gridModel.AllowAutoFocus; settings.EditColumns = gridModel.SettingsEditing.EditColumns; s.SettingsEditing.BatchUpdateRouteValues = gridModel.SettingsEditing.BatchUpdateRouteValues; s.SettingsEditing.Mode = gridModel.SettingsEditing.Mode; s.SettingsEditing.BatchEditSettings.EditMode = GridViewBatchEditMode.Cell; s.SettingsEditing.BatchEditSettings.StartEditAction = GridViewBatchStartEditAction.Click; foreach (var item in gridModel.SettingsEditing.EditColumns ?? Enumerable.Empty()) { s.FormatConditions.AddHighlight(item, "1 == 1", GridConditionHighlightFormat.LightGreenFill); } s.Settings.ShowStatusBar = gridModel.ShowStatusBar; settings.StatusBar.StatusBarTemplate = gridModel.StatusBarTemplate; } return SWGrid(htmlHelper, setSettings); } public static SWGridViewExtension SWGrid(this HtmlHelper htmlHelper, Action settings) { SWGridViewSettings swGridViewSettings = new SWGridViewSettings(); settings?.Invoke(swGridViewSettings); swGridViewSettings.DVGridViewSettings.Styles.AlternatingRow.CssClass = "GridviewEvenRowColor"; swGridViewSettings.DVGridViewSettings.DataBound += (s, e) => { MVCxGridView grid = (MVCxGridView)s; grid.FocusedRowIndex = swGridViewSettings.AllowAutoFocus ? 0 : -1; swGridViewSettings.SWGrid.SetColumnTemplates(grid.Columns); }; swGridViewSettings.DVGridViewSettings.CellEditorInitialize += (s, e) => { if (swGridViewSettings.EditColumns != null && swGridViewSettings.EditColumns.IndexOf(e.Column.FieldName) > -1) { e.Editor.ReadOnly = false; } else { e.Editor.ReadOnly = true; } }; swGridViewSettings.DVGridViewSettings.ClientLayout = (s, e) => { switch (e.LayoutMode) { case ClientLayoutMode.Loading: if (HttpContext.Current.Session[swGridViewSettings.SWGridMetaSettings.Id + "_LayoutGrid"] != null && flag==true) { e.LayoutData = HttpContext.Current.Session[swGridViewSettings.SWGridMetaSettings.Id + "_LayoutGrid"].ToString(); } break; case ClientLayoutMode.Saving: HttpContext.Current.Session[swGridViewSettings.SWGridMetaSettings.Id + "_LayoutGrid"] = e.LayoutData; break; } }; swGridViewSettings.DVGridViewSettings.Init += (s, e) => { MVCxGridView grid = (MVCxGridView)s; grid.AutoGenerateColumns = true; }; swGridViewSettings.SWGrid.GridViewSettings = swGridViewSettings; StringBuilder clientScript = new StringBuilder(); if (swGridViewSettings.ClientEndCallbacks.Count > 0) { clientScript.Append("function(s,e) {"); swGridViewSettings.ClientEndCallbacks.Values.ToList().ForEach(e => clientScript.Append(e)); clientScript.Append(" }"); swGridViewSettings.DVGridViewSettings.ClientSideEvents.EndCallback = clientScript.ToString(); } if (swGridViewSettings.ClientFocusedRowChanged.Count > 0) { clientScript = new StringBuilder(); clientScript.Append("function(s,e) {"); swGridViewSettings.ClientFocusedRowChanged.Values.ToList().ForEach(e => clientScript.Append(e)); clientScript.Append(" }"); swGridViewSettings.DVGridViewSettings.ClientSideEvents.FocusedRowChanged = clientScript.ToString(); } if (!swGridViewSettings.BatchEditEndEditing.ContainsKey("####3800#####")) { swGridViewSettings.BatchEditEndEditing.Add("####3800#####", @"setTimeout(function() { if (s.batchEditApi.HasChanges()) { s.UpdateEdit(); }}, 1);"); } if (swGridViewSettings.BatchEditEndEditing.Count > 0) { clientScript = new StringBuilder(); clientScript.Append("function(s,e) {"); swGridViewSettings.BatchEditEndEditing.Values.ToList().ForEach(e => clientScript.Append(e)); clientScript.Append(" }"); swGridViewSettings.DVGridViewSettings.ClientSideEvents.BatchEditEndEditing = clientScript.ToString(); } IGridTemplate statusBarTemplate = null; if (!String.IsNullOrEmpty(swGridViewSettings.StatusBar.StatusBarTemplate)) { Type toolbarType = Type.GetType(swGridViewSettings.StatusBar.StatusBarTemplate); if (toolbarType != null) { Type[] typeArgs = { typeof(T) }; var makeme = toolbarType.MakeGenericType(typeArgs); statusBarTemplate = Activator.CreateInstance(makeme) as IGridTemplate; } if (statusBarTemplate != null) { statusBarTemplate.SWGrid = swGridViewSettings.SWGrid; statusBarTemplate.HtmlHelper = htmlHelper; swGridViewSettings.DVGridViewSettings.SetStatusBarTemplateContent(statusBarTemplate.Build); } else { log.Warn($"'{swGridViewSettings.StatusBar.StatusBarTemplate}' could not be created."); } } if ( !( String.IsNullOrEmpty(swGridViewSettings.SWGridMetaSettings.ModulName) || String.IsNullOrEmpty(swGridViewSettings.SWGridMetaSettings.PageName) || String.IsNullOrEmpty(swGridViewSettings.SWGridMetaSettings.GridName) || String.IsNullOrEmpty(swGridViewSettings.SWGridMetaSettings.ProcName) || String.IsNullOrEmpty(swGridViewSettings.SWGridMetaSettings.Owner) )) { swGridViewSettings.SWGrid.BuildGrid(); } string currentController = htmlHelper.ViewContext.RouteData.Values["controller"].ToString(); String applicationPath = HttpContext.Current.Request.ApplicationPath; var webPage = htmlHelper.ViewDataContainer as WebPageBase; var virtualPath = webPage.VirtualPath; Url url = new Url(virtualPath); string path = url.Value.ToString(); clientScript = new StringBuilder(); clientScript.Append("function(sender, args) { if (args.objectType != 'header') return;"); clientScript.Append("var fieldname = sender.GetColumn(args.index).fieldName; "); clientScript.Append("var columnIndex = args.columnIndex;"); clientScript.Append(" var fontSize = parseInt($('body').css('font-size'));"); clientScript.Append($"const path= '{path}';"); clientScript.Append(" sender.PerformCallback({ index: args.index, width: sender.cpColumnWidths[args.index], fieldName: fieldname , gridName:sender.name,path:path}); }"); swGridViewSettings.DVGridViewSettings.ClientSideEvents.ContextMenu = clientScript.ToString(); swGridViewSettings.DVGridViewSettings.PreRender = (sender, e) => { MVCxGridView gridView = sender as MVCxGridView; List columnWidths = new List(); foreach (GridViewDataColumn column in gridView.Columns) columnWidths.Add((int)column.Width.Value); gridView.JSProperties["cpColumnWidths"] = columnWidths; }; return new SWGridViewExtension(HtmlHelperExtension.DevExpress(htmlHelper).GridView(swGridViewSettings.DVGridViewSettings), statusBarTemplate, swGridViewSettings); } } public class SWGridViewExtension { GridViewExtension _gridViewExtension; IGridTemplate _statusBarTemplate; SWGridViewSettings _swGridViewSettings; public SWGridViewExtension(GridViewExtension gridViewExtension, IGridTemplate statusBarTemplate, SWGridViewSettings swGridViewSettings) { _gridViewExtension = gridViewExtension; _statusBarTemplate = statusBarTemplate; _swGridViewSettings = swGridViewSettings; } public GridViewExtension Bind(Object data, IStatusBarModel statusBarModel) { if(_statusBarTemplate != null) _statusBarTemplate.Model = statusBarModel; return _gridViewExtension.Bind(data); } public GridViewExtension Bind(Object data) { return _gridViewExtension.Bind(data); } public MvcHtmlString GetHtml() { return _gridViewExtension.GetHtml(); } } }