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();
}
}
}