using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Text.RegularExpressions; using System.Web; using System.Web.Mvc; using Kendo.Mvc.Extensions; using Kendo.Mvc.UI; using Kendo.Mvc.UI.Fluent; using Kreta.BusinessLogic.Interfaces; using Kreta.Enums.ManualEnums; using Kreta.Framework; using Kreta.Framework.Util; using Kreta.Web.Classes; using Kreta.Web.Helpers.Grid; namespace Kreta.Web.Helpers { public static class GridExtensions { /* this classes has referance on js side as well */ public const string CheckboxClass = "gridCheckBox"; public const string SelectCheckboxClass = "gridSelectCheckBox"; public const string HeaderSelectCheckboxClass = "gridHeaderSelectCheckBox"; public const string SelectRadioBtnClass = "gridSelectRadioBtn"; public const string TextboxClass = "gridTextbox"; public const string TextareaClass = "gridTextarea"; public const string FormattedTextInputClass = "gridFormattedTextInput"; public const string NumericboxClass = "gridNumericBox"; public const string DropDownClass = "gridDropDownList"; public const string TimePickerClass = "gridTimePicker"; public const string GridSelectClass = "gridSelect"; public const string GridComboBoxClass = "gridComboBox"; public const string ToolbarTemplate = @"
{0} {1} {2} {3}
"; public const string ExcelExportToolbarTemplate = @" "; public const string PdfExportToolbarTemplate = @" "; public const string PagerToolbarTemplate = @" {0} 0 - 0 / 0"; private const string FunctionCommandButtonTemplate = ""; public static GridBuilder KretaGrid( this HtmlHelper helper, IEnumerable dataSource, string name, string dataBoundAdditionalFunction = "") where TFirstLevelType : class { var grid = helper.Kendo().Grid(dataSource) .Name(name) .DataSource(source => { source.Ajax(); }) .Events(events => { events.DataBound($@" function(e) {{ KretaGridHelper.init(e); KretaTooltipHelper.setGridCellTooltip($("".kretaTooltipDefaultClass""), ""#kendoTooltip-defaultTemplate""); KretaDateTimeHelper.SetMaskedTimepicker(); KretaDateTimeHelper.SetTimepicker(); {dataBoundAdditionalFunction} }}"); }) .NoRecords(StringResourcesUtil.GetString(155) /*Nincs találat*/); return grid; } public static GridBuilder KretaGrid( this HtmlHelper helper, string name, GridApiUrl getUrl = null, GridApiUrl postUrl = null, GridApiUrl putUrl = null, GridApiUrl deleteUrl = null, object routeValues = null, bool allowScrolling = false, bool allowSorting = true, bool allowPaging = true, bool allowGrouping = false, bool allowFooter = true, bool allowFilterable = false, bool allowExcelExport = false, bool popupExport = false, string excelExportFileName = "ExcelExport", bool allowPdfExport = false, int? pageSizes = 100, string dataParameterFunction = "", string readDataFunction = "", string editHandlerFunction = "function(){}", string syncHandlerFunction = "function(){}", string requestEndAdditionalFunction = "", string dataBoundAdditionalFunction = "", string clientTemplate = "", string clientTemplateUrl = "", bool clientTemplateWholeDataRow = false, bool useToolBar = true, string exportColumnUrl = null, string exportDataUrl = null, bool mustShowPagerCount = true, bool postRead = false, bool batchEdit = false, string errorHandlerFunction = @"function(error) { if (!CommonUtils.isNullOrUndefined(error) && error.status === 'customerror') { KretaWindowHelper.notification('A szolgáltatás nem elérhető.', 'error'); return; } KretaWindowHelper.notification('Hiba történt az adatok betöltése közben.', 'error'); }", //Action> modelDescriptor = null, Action> sort = null, Action> aggregates = null, bool showSorszam = true ) where TFirstLevelType : class, IKretaIdentity { var url = new UrlHelper(HttpContext.Current.Request.RequestContext); var hasSzuro = false; var grid = helper.Kendo().Grid() .Name(name) .Scrollable(s => { s.Enabled(allowScrolling); if (!allowPaging) { s.Virtual(true); } }) .Editable(editable => editable.Mode(GridEditMode.PopUp)) .Sortable(s => s.Enabled(allowSorting)) .Pageable(p => p.Enabled(allowPaging).PreviousNext(false).PageSizes(false).Numeric(false).Info(false)) .Filterable(f => f.Enabled(allowFilterable)) .Groupable(g => g.Enabled(allowGrouping).Messages(m => m.Empty(StringResourcesUtil.GetString(3482)))) .DataSource(source => { var ajaxDataSource = source.Ajax().Batch(batchEdit); if (!string.IsNullOrWhiteSpace(requestEndAdditionalFunction)) { requestEndAdditionalFunction += $"(e, '{name}');"; } var requestStartHandler = "function(e) { setTimeout(function(e) { $(\".k-loading-image\").hide(); } )}"; var requestEndHandler = $"function(e) {{ KretaGridHelper.initToolBar(e, '{name}'); {requestEndAdditionalFunction} }}"; ajaxDataSource.Events(e => e.RequestStart(requestStartHandler).RequestEnd(requestEndHandler).Error(errorHandlerFunction).Sync(syncHandlerFunction)) .Model(model => { model.Id(p => p.ID); }); if (!string.IsNullOrWhiteSpace(readDataFunction)) { dataParameterFunction = readDataFunction; } else { if (!string.IsNullOrWhiteSpace(dataParameterFunction)) { dataParameterFunction = $"function(){{ return KretaGridHelper.getSearchParameters('#{dataParameterFunction}'); }}"; hasSzuro = true; } else { dataParameterFunction = "function(){ return { data: JSON.stringify({}) }; }"; } } if (getUrl != null) { var type = postRead ? HttpVerbs.Post : HttpVerbs.Get; if (!pageSizes.HasValue) { pageSizes = 0; } ajaxDataSource.PageSize(pageSizes.Value).Read(read => read.Data(dataParameterFunction) .Url(url.HttpRouteUrl(getUrl.Route, getUrl.RouteValues) ).Type(type)); } if (postUrl != null) { ajaxDataSource.Create(create => create.Data(dataParameterFunction).Url(url.HttpRouteUrl(postUrl.Route, postUrl.RouteValues)).Type(HttpVerbs.Post)); } if (putUrl != null) { ajaxDataSource.Update(update => update.Data(dataParameterFunction).Url(url.HttpRouteUrl(putUrl.Route, putUrl.RouteValues)).Type(HttpVerbs.Put)); } if (deleteUrl != null) { ajaxDataSource.Destroy(destroy => destroy.Data(dataParameterFunction).Url(url.HttpRouteUrl(deleteUrl.Route, deleteUrl.RouteValues)).Type(HttpVerbs.Delete)); } if (sort != null) { ajaxDataSource.Sort(sort); } if (aggregates != null) { ajaxDataSource.Aggregates(aggregates); } }) .AutoBind(!hasSzuro) .Events(events => { events.DataBound($@" function(e) {{ KretaGridHelper.init(e); KretaTooltipHelper.setGridCellTooltip($("".kretaTooltipDefaultClass""), ""#kendoTooltip-defaultTemplate""); KretaDateTimeHelper.SetMaskedTimepicker(); KretaDateTimeHelper.SetTimepicker(); {dataBoundAdditionalFunction} }}").Edit(editHandlerFunction); }) .NoRecords(StringResourcesUtil.GetString(155) /*Nincs találat*/); if (showSorszam) { var regex = new Regex("^[^a-zA-Z_$]|[^\\w$]"); var rowNumberName = regex.Replace(name, "_") + "RowNumber"; grid.Events(events => { events.DataBinding($@"function() {{ var currrentRowNumber = 1; if (!CommonUtils.isUndefined(this.dataSource.page()) && !CommonUtils.isUndefined(this.dataSource.pageSize())) {{ currrentRowNumber = currrentRowNumber + (this.dataSource.page() - 1) * this.dataSource.pageSize(); }} {rowNumberName} = currrentRowNumber; }}"); }); grid.Columns(c => c.Template(t => t.ToString()) .Title("#") .Width("42px") .HeaderHtmlAttributes(new { @class = "kretaRowNumberHeader" }) .HtmlAttributes(new { title = $"#: {rowNumberName} #", @class = "kretaEllipsis kretaRowNumber" }) //NOTE: Azért van szüksége "%2B"-re mert a ClientTemplate nem tudja kirenderelni a "+" jelet! .ClientTemplate($"#= {rowNumberName}%2B%2B #")); } if (exportColumnUrl == null || exportDataUrl == null) { grid.Excel(excel => excel .FileName(name + " Grid Export.xlsx") .Filterable(true) .ProxyURL(url.Action("Excel_Export_Save", "Layout", new { area = string.Empty })) .ForceProxy(true) .AllPages(true)); } else { grid.HtmlAttributes(new { data_exportColumnUrl = exportColumnUrl, data_exportDataUrl = exportDataUrl }); } bool isMultipleGrid = false; if (!string.IsNullOrWhiteSpace(clientTemplate) && !string.IsNullOrWhiteSpace(clientTemplateUrl)) { grid.ClientDetailTemplateId(clientTemplate); grid.HtmlAttributes(new { clientTemplateUrl, clientTemplateWholeDataRow }); isMultipleGrid = true; } if (useToolBar) { if (allowExcelExport) { grid.Excel(excel => excel .FileName(name + " Grid Export.xlsx") .Filterable(true) .ProxyURL(url.Action("Excel_Export_Save", "Layout", new { area = string.Empty })) .ForceProxy(true) .AllPages(true)); } if (allowPdfExport) { grid.Pdf(pdf => pdf .AllPages() .FileName(name + " Grid Export.pdf") .ProxyURL(url.Action("Pdf_Export_Save", "Layout", new { area = string.Empty })) .ForceProxy(true)); } grid.ToolBar( tools => { tools.Template(GetToolbarHtml(name, helper, allowPaging, pageSizes.Value, isMultipleGrid, allowExcelExport, allowPdfExport, exportColumnUrl, exportDataUrl, mustShowPagerCount, excelExportFileName, popupExport)); }); } return grid; } /// /// Kendo grid patch az unicode karakterek támogatásához. Enélkül elszáll a detail template. (Most csak a hosszú í-re) /// /// /// /// public static MvcHtmlString ToGridClientTemplate(this GridBuilder gridBuilder) where TDataType : class { var initial = gridBuilder.ToClientTemplate().ToHtmlString(); var corrected = initial.Replace("í", "í"); return new MvcHtmlString(corrected); } public static GridBuilder LinkButtonColumn(this GridBuilder gridBuilder, string linkTitle, Expression> parameterName, string functionClientName, GridButtonsEnum buttonType, bool showHeader = true, string hiddenCondition = "false", bool enabled = true, string format = null, string customField = null, string width = null) where TDataType : class { if (!enabled) { return gridBuilder; } var fieldName = ExpressionHelper.GetExpressionText(parameterName); if (!string.IsNullOrWhiteSpace(format)) { fieldName = $"kendo.format(\"{format}\", {fieldName})"; } string template = $"#:{(!string.IsNullOrWhiteSpace(customField) ? customField : fieldName)}#"; template = template.Replace("hiddencondition", "if ( " + hiddenCondition + ") { # style = 'display:none' # }"); if (!string.IsNullOrWhiteSpace(width)) { if (!showHeader) { return gridBuilder.Columns(n => n.Template(o => o.ToString()).ClientTemplate(template).Width(width).HeaderHtmlAttributes(new { style = "display:none" }).HeaderTemplate("").Title("")); } return gridBuilder.Columns(c => c.Bound(parameterName).Template(t => t.ToString()).ClientTemplate(template).Width(width)); } if (!showHeader) { return gridBuilder.Columns(n => n.Template(o => o.ToString()).ClientTemplate(template).Width(40).HeaderHtmlAttributes(new { style = "display:none" }).HeaderTemplate("").Title("")); } return gridBuilder.Columns(c => c.Bound(parameterName).Template(t => t.ToString()).ClientTemplate(template)); } public static GridBuilder RowFunction(this GridBuilder gridBuilder, HtmlHelper html, List rowFunctions) where TDataType : class { SetGridBuilderColumns(gridBuilder, rowFunctions, html, false); return gridBuilder; } public static GridBuilder RowFunction(this GridBuilder gridBuilder, HtmlHelper html, List rowFunctions, string header) where TDataType : class { SetGridBuilderColumns(gridBuilder, rowFunctions, html, false, header: header); return gridBuilder; } public static GridBuilder RowFunction(this GridBuilder gridBuilder, HtmlHelper html, List rowFunctions, int iconCount) where TDataType : class { SetGridBuilderColumns(gridBuilder, rowFunctions, html, false, iconCount: iconCount); return gridBuilder; } public static GridBuilder ConditionalRowFunction(this GridBuilder gridBuilder, HtmlHelper html, List rowFunctions, string isVisibleRowFunctionJsFunctionName, int? iconCount = null) where TDataType : class { SetGridBuilderColumns(gridBuilder, rowFunctions, html, true, isVisibleRowFunctionJsFunctionName, iconCount: iconCount); return gridBuilder; } private static void SetGridBuilderColumns(GridBuilder gridBuilder, List rowFunctions, HtmlHelper html, bool isConditional, string isVisibleRowFunctionJsFunctionName = null, string header = null, int? iconCount = null) where TDataType : class { var gridName = gridBuilder.ToComponent().Name; var htmlAttributes = new Dictionary { {"class", "rowFunction"}, {"data-rowFunctionParent", gridName} }; string clientTemplate; if (rowFunctions.All(x => x.IconEnum != null)) { var minWidth = iconCount.HasValue ? iconCount.Value * 40 : 80; htmlAttributes.Add("style", $"min-width: {minWidth}px;{(iconCount.HasValue ? $"width: {iconCount.Value * 40}px" : "")}"); clientTemplate = GetRowFunctionClientTemplateIcon(gridName, html, rowFunctions); } else { clientTemplate = GetRowFunctionClientTemplate(gridName, html, rowFunctions); } if (!string.IsNullOrWhiteSpace(clientTemplate)) { var sb = new StringBuilder(); if (isConditional) { sb.AppendFormat("#if({0}(data)){{#", isVisibleRowFunctionJsFunctionName); sb.Append(clientTemplate); sb.Append("#}#"); } else { sb.Append(clientTemplate); } gridBuilder.Columns(c => c.Template(t => t.ToString()) .HtmlAttributes(htmlAttributes) .HeaderHtmlAttributes(htmlAttributes) .ClientTemplate(sb.ToString()) .HeaderTemplate(header) ); } } private static string GetRowFunctionClientTemplate(string gridName, HtmlHelper html, List rowFunctions) { var clientTemplate = html.Kendo() .Menu() .Name(gridName + "_menu_#=ID#" + "_" + Guid.NewGuid()) .Direction(MenuDirection.Left) .OpenOnClick(true) .Items(its => { its.Add().Items(nested => { foreach (var function in rowFunctions) { var menuItem = nested.Add() .Text(function.NameResourceId.HasValue ? StringResourcesUtil.GetString(function.NameResourceId.Value) : function.Name); if (!string.IsNullOrWhiteSpace(function.ClientAction)) { menuItem.HtmlAttributes(new { //@onclick = string.Format("KretaGridHelper.rowFunctionCall($(this),'{0}',{1});", gridName, function.ClientAction) @onclick = $"KretaGridHelper.rowFunctionCall($(this),'{gridName}',{function.ClientAction});" }); } } }); }).ToClientTemplate() .ToHtmlString(); return clientTemplate; } private static string GetRowFunctionClientTemplateIcon(string gridName, HtmlHelper html, List rowFunctions) { var sb = new StringBuilder(); foreach (var item in rowFunctions) { if (item.IsConditional) { sb.AppendFormat("#if({0}(data)){{#", item.IsVisibleRowFunctionJsFunctionName); } var buttonTemplate = "  "; var clientEvent = string.Empty; if (!string.IsNullOrWhiteSpace(item.ClientAction)) { clientEvent = string.Format(@"onclick = ""KretaGridHelper.rowFunctionCall($(this),'{0}',{1}{2});""", gridName, item.ClientAction, (item.SendSender) ? ",true" : ""); } var iconClass = ""; if (item.IconEnum == GridRowFunctionIconEnum.Adatok) iconClass = "fa fa-search"; if (item.IconEnum == GridRowFunctionIconEnum.Modositas) iconClass = "fa fa-pencil"; if (item.IconEnum == GridRowFunctionIconEnum.Torles) iconClass = "fa fa-trash"; if (item.IconEnum == GridRowFunctionIconEnum.Aktival) iconClass = "fa fa-check-circle"; if (item.IconEnum == GridRowFunctionIconEnum.Uj) iconClass = "fa fa-plus"; if (item.IconEnum == GridRowFunctionIconEnum.Statisztika) iconClass = "fa fa-bar-chart"; if (item.IconEnum == GridRowFunctionIconEnum.HaromPont) iconClass = "fa fa-ellipsis-h"; if (item.IconEnum == GridRowFunctionIconEnum.KorbenX) iconClass = "fa fa-times-circle"; if (item.IconEnum == GridRowFunctionIconEnum.Letoltes) iconClass = "fa fa-download"; if (item.IconEnum == GridRowFunctionIconEnum.Ujra) iconClass = "fa fa-refresh"; if (item.IconEnum == GridRowFunctionIconEnum.Vagolap) iconClass = "fa fa-clipboard"; if (item.IconEnum == GridRowFunctionIconEnum.Kep) iconClass = "fa fa-image"; if (item.IconEnum == GridRowFunctionIconEnum.Excel) iconClass = "fa fa-file-excel-o"; if (item.IconEnum == GridRowFunctionIconEnum.Word) iconClass = "fa fa-file-word-o"; if (item.IconEnum == GridRowFunctionIconEnum.Pdf) iconClass = "fa fa-file-pdf-o"; if (item.IconEnum == GridRowFunctionIconEnum.Feltoltes) iconClass = "fa fa-upload"; if (item.IconEnum == GridRowFunctionIconEnum.Ban) iconClass = "fa fa-ban"; if (item.IconEnum == GridRowFunctionIconEnum.TimesCircle) iconClass = "fa fa-times-circle-o"; var title = item.NameResourceId.HasValue ? StringResourcesUtil.GetString(item.NameResourceId.Value) : item.Name; sb.AppendFormat(buttonTemplate, clientEvent, title, iconClass); if (item.IsConditional) { if (!item.IsMultipleConditionalColumn) { sb.Append("#}#"); } else { // Ha nem jelenik meg az elem, akkor a helyét kitöltjük, hogy ne "essenek" össze a gombok. sb.AppendFormat("#}}else{{#  #}}#", iconClass); } } } return sb.ToString(); } public static GridBuilder FunctionCommand(this GridBuilder gridBuilder, HtmlHelper html, List functions, int breakIndex = 6) where TDataType : class { gridBuilder.ToolBar(tools => { var component = gridBuilder.ToComponent(); var gridName = component.Name; var sb = new StringBuilder(); sb.Append("
"); for (int index = 0; index < functions.Count; index++) { FunctionCommand function = functions[index]; if (function.NestedCommands != null && function.NestedCommands.Any()) { var text = function.NameResourceId.HasValue ? StringResourcesUtil.GetString(function.NameResourceId.Value) : function.Name; sb.Append(GetFunctionCommandMenu(html, gridName, $"FunctionCommandMenu_{index}", text, function.NestedCommands)); } else { sb.Append(GetFunctionCommandButton(gridName, function)); } } sb.Append("
"); if (!string.IsNullOrWhiteSpace(component.ToolBar.Template.Html)) { sb.Append(component.ToolBar.Template.Html); } tools.Template(sb.ToString()); }); return gridBuilder; } public static GridBuilder HeaderCustomContent(this GridBuilder gridBuilder, HtmlHelper html, string content) where TDataType : class { gridBuilder.ToolBar(tools => { var component = gridBuilder.ToComponent(); var sb = new StringBuilder(); sb.Append("
"); sb.Append(content); sb.Append("
"); if (!string.IsNullOrWhiteSpace(component.ToolBar.Template.Html)) { sb.Append(component.ToolBar.Template.Html); } tools.Template(sb.ToString()); }); return gridBuilder; } private static string GetFunctionCommandButton(string gridName, FunctionCommand functionCommand) { var clientEvent = string.Empty; var text = functionCommand.NameResourceId.HasValue ? StringResourcesUtil.GetString(functionCommand.NameResourceId.Value) : functionCommand.Name; if (!string.IsNullOrWhiteSpace(functionCommand.ClientAction)) { clientEvent = string.Format(@"onclick = ""KretaGridHelper.functionCommandCall($(this),'{0}',{1});""", gridName, functionCommand.ClientAction); } return string.Format(FunctionCommandButtonTemplate, functionCommand.Classes, functionCommand.Enabled ? clientEvent : string.Empty, text, !functionCommand.Enabled ? @"disabled = 'true'" : string.Empty); } private static string GetFunctionCommandMenu(HtmlHelper html, string gridName, string name, string text, List functions) { var menu = html.Kendo().Menu().Name($"{gridName}_{name}") .Items(its => { its.Add().Text(text).Items(nested => { foreach (var function in functions) { var menuItem = nested.Add().Text(function.NameResourceId.HasValue ? StringResourcesUtil.GetString(function.NameResourceId.Value) : function.Name); if (!string.IsNullOrWhiteSpace(function.ClientAction)) { menuItem.HtmlAttributes(new { onclick = string.Format("KretaGridHelper.functionCommandCall($(this),'{0}',{1});", gridName, function.ClientAction) }); } if (!function.Enabled) { menuItem.HtmlAttributes(new { disabled = "true" }); } } }); }); return menu.ToHtmlString(); } //[Obsolete("Use ConditionColumn insted")] public static GridBuilder EditableComboBoxColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, string url, Expression> expression, string dataTextField = "Text", string datavalueField = "Value", string groupName = null, Type groupType = null, bool maxWidth = false, bool disabled = false, string openEvent = "", Expression> conditionExpression = null) where TDataType : class { var gridName = gridBuilder.ToComponent().Name; var proprtyName = GetProperyNameFromExpression(expression); var uniqueName = $"{gridName}_{proprtyName}_#=ID#"; var conditionproprtyName = string.Empty; if (conditionExpression != null) conditionproprtyName = GetProperyNameFromExpression(conditionExpression); var sb = new StringBuilder(); var htmlAttr = new Dictionary { {"data-DropdownGroup", $"{gridName}_{proprtyName}"}, {"data-rowInputName", proprtyName} }; if (maxWidth) { htmlAttr.Add("class", "gridInputMaxWidth"); } if (disabled) { htmlAttr.Add("disabled", "disabled"); } var widget = html.KretaComboBox(uniqueName, null, dataTextField, datavalueField, "", groupName, groupType, true, true); if (!string.IsNullOrWhiteSpace(openEvent)) widget.Events(e => e.DataBound(openEvent)); if (conditionExpression != null) { sb.AppendFormat("#if({0}){{#", conditionproprtyName); sb.AppendFormat(" #:{0}# ", proprtyName); sb.Append("#}else{#"); } sb.AppendFormat("#if(CommonUtils.isNullOrUndefined({0})){{#", proprtyName); sb.Append(widget.HtmlAttributes(htmlAttr).ToClientTemplate().ToHtmlString()); sb.Append("#}else{#"); htmlAttr.Add("value", $"#:{proprtyName}#"); sb.Append(widget.HtmlAttributes(htmlAttr).ToClientTemplate().ToHtmlString()); sb.Append("#}#"); if (conditionExpression != null) sb.Append("#}#"); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(title) .HtmlAttributes(new { @class = DropDownClass, data_inputParentGrid = gridName, data_dropdownUrl = url, data_uddlId = uniqueName }).ClientTemplate( sb.ToString() )); return gridBuilder; } [Obsolete("Use ConditionColumn insted")] public static GridBuilder EditableDropDownColumn(this GridBuilder gridBuilder, HtmlHelper html, int intTitle, string url, Expression> conditionExpression, Expression> expression, string dataTextField = "Text", string datavalueField = "Value", string groupName = null, Type groupType = null, bool maxWidth = false, string customClass = null) where TDataType : class { return EditableDropDownColumn(gridBuilder, html, StringResourcesUtil.GetString(intTitle), url, conditionExpression, expression, dataTextField, datavalueField, groupName, groupType, maxWidth, customClass); } [Obsolete("Use ConditionColumn insted")] public static GridBuilder EditableDropDownColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, string url, Expression> conditionExpression, Expression> expression, string dataTextField = "Text", string datavalueField = "Value", string groupName = null, Type groupType = null, bool maxWidth = false, string customClass = null) where TDataType : class { var gridName = gridBuilder.ToComponent().Name; var proprtyName = GetProperyNameFromExpression(expression); var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, proprtyName); var conditionproprtyName = GetProperyNameFromExpression(conditionExpression); var sb = new StringBuilder(); var htmlAttr = new Dictionary(); htmlAttr.Add("data-DropdownGroup", string.Format("{0}_{1}", gridName, proprtyName)); htmlAttr.Add("data-rowInputName", proprtyName); if (maxWidth) { htmlAttr.Add("class", "gridInputMaxWidth"); } sb.AppendFormat("#if({0}){{#", conditionproprtyName); sb.AppendFormat(" #:{0}# ", proprtyName); sb.Append("#}else{#"); sb.AppendFormat("#if(CommonUtils.isNullOrUndefined({0})){{#", proprtyName); sb.Append(html.KretaDropdownList(uniqueName, null, dataTextField, datavalueField, groupName, groupType).HtmlAttributes(htmlAttr) .ToClientTemplate().ToHtmlString()); sb.Append("#}else{#"); htmlAttr.Add("value", string.Format("#:{0}#", proprtyName)); sb.Append(html.KretaDropdownList(uniqueName, null, dataTextField, datavalueField, groupName, groupType).HtmlAttributes(htmlAttr).ToClientTemplate().ToHtmlString()); sb.Append("#}#"); sb.Append("#}#"); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(title) .HtmlAttributes(new { @class = DropDownClass + (!string.IsNullOrWhiteSpace(customClass) ? " " + customClass : string.Empty), @data_inputParentGrid = gridName, @data_dropdownUrl = url, @data_dropdownGroupCustomOrder = "desc", @data_uddlId = uniqueName }).ClientTemplate( sb.ToString() )); return gridBuilder; } public static string TextAreaForColumnTemplate(this GridBuilder gridBuilder, HtmlHelper html, Expression> expression, int rows = 1, Dictionary htmlAttr = null) where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = $"{gridName}_{proprtyName}_#=ID#"; if (htmlAttr == null) { htmlAttr = new Dictionary(); } htmlAttr = htmlAttr.Union(new Dictionary { {"data-textareaGroup", $"{gridName}_{proprtyName}"}, {"data-rowInputName", proprtyName} }).ToDictionary(k => k.Key, v => v.Value); var sb = new StringBuilder(); sb.AppendFormat("
", TextareaClass, gridName); sb.AppendFormat("#if(CommonUtils.isNullOrUndefined({0})){{#", proprtyName); sb.Append(html.KretaTextArea(uniqueName, new List(), rows, htmlAttr).ToHtmlString()); sb.Append("#} else {#"); sb.Append(html.KretaTextArea(uniqueName, new List { $"#:{proprtyName}#" }, rows, htmlAttr).ToHtmlString()); sb.Append("#}#"); sb.Append("
"); return sb.ToString(); } public static string TextBoxForColumnTemplate(this GridBuilder gridBuilder, HtmlHelper html, Expression> expression, Dictionary htmlAttr = null) where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = $"{gridName}_{proprtyName}_#=ID#"; if (htmlAttr == null) { htmlAttr = new Dictionary(); } htmlAttr = htmlAttr.Union(new Dictionary { {"data-textboxGroup", $"{gridName}_{proprtyName}"}, {"data-rowInputName", proprtyName} }).ToDictionary(k => k.Key, v => v.Value); var undefinedPropertyHtmlAttr = htmlAttr.Union(new Dictionary { {"value", ""}, }).ToDictionary(k => k.Key, v => v.Value); var definedPropertyHtmlAttr = htmlAttr.Union(new Dictionary { {"value", $"#:{proprtyName}#"} }).ToDictionary(k => k.Key, v => v.Value); var sb = new StringBuilder(); sb.AppendFormat("
", TextboxClass, gridName); sb.AppendFormat("#if(CommonUtils.isNullOrUndefined({0})){{#", proprtyName); sb.Append(html.KretaTextBox(uniqueName, true, undefinedPropertyHtmlAttr).ToClientTemplate().ToHtmlString()); sb.Append("#} else {#"); sb.Append(html.KretaTextBox(uniqueName, true, definedPropertyHtmlAttr).ToClientTemplate().ToHtmlString()); sb.Append("#}#"); sb.Append("
"); return sb.ToString(); } public static string KretaFormattedTextInputForColumnTemplate(this GridBuilder gridBuilder, HtmlHelper html, Expression> expression, Dictionary htmlAttributes = null) where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = $"{gridName}_{proprtyName}_#=ID#"; if (htmlAttributes == null) { htmlAttributes = new Dictionary(); } var defaultHtmlAttributes = new Dictionary { {"id", uniqueName}, {"name", uniqueName}, {"class", "k-kretaFormattedTextInput"}, {"contenteditable", true} }; if (htmlAttributes.ContainsKey("class")) { defaultHtmlAttributes["class"] += $" {htmlAttributes["class"]}"; htmlAttributes.Remove("class"); } htmlAttributes = defaultHtmlAttributes.Union(htmlAttributes).ToDictionary(k => k.Key, v => v.Value); var stringBuilder = new StringBuilder(); stringBuilder.AppendFormat("
", FormattedTextInputClass, gridName); stringBuilder.Append("
"); stringBuilder.AppendFormat("#if(!CommonUtils.isNullOrUndefined({0})){{#", proprtyName); stringBuilder.Append($"#:{proprtyName}#"); stringBuilder.Append("#}#"); stringBuilder.Append("
"); stringBuilder.Append("
"); return stringBuilder.ToString(); } public static GridBuilder KretaFormattedTextInputForColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, Expression> expression, int? width = null) where TDataType : class { if (width == null) { width = 0; } gridBuilder.Columns(c => c.Template(t => t.ToString()) .Width(width.Value) .Title(title) .ClientTemplate( gridBuilder.KretaFormattedTextInputForColumnTemplate(html, expression) )); return gridBuilder; } public static string NumericBoxForColumnTemplate(this GridBuilder gridBuilder, HtmlHelper html, Expression> expression, int? min = null, int? max = null, int? precision = null, double step = 1, Dictionary htmlAttr = null) where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = $"{gridName}_{proprtyName}_#=ID#"; if (htmlAttr == null) { htmlAttr = new Dictionary(); } htmlAttr = htmlAttr.Union(new Dictionary { {"data-numericboxGroup", $"{gridName}_{proprtyName}"}, {"value", $"#:{proprtyName}#"}, {"data-rowInputName", proprtyName} }).ToDictionary(k => k.Key, v => v.Value); var control = html.KretaNumeric(uniqueName, htmlAttr).Step(step); if (min.HasValue) { control.Min(min.Value); } if (max.HasValue) { control.Max(max.Value); } if (precision.HasValue) { // HOWTO: -decimals is applicable when the widget is focused -format is applicable when the widget is not focused control.Decimals(precision.Value); control.Format("n" + precision.Value); } return $"
{control.ToClientTemplate().ToHtmlString()}
"; } public static string SelectForColumnTemplate(this GridBuilder gridBuilder, HtmlHelper html, Expression> expression, List list, bool hasTooltip = false, string customClickFunctionName = null) where TDataType : class { return gridBuilder.SelectForColumnTemplate(html, expression, list.Select(x => new ExtendedSelectListItem(x)).ToList(), hasTooltip, customClickFunctionName); } public static string SelectForColumnTemplate(this GridBuilder gridBuilder, HtmlHelper html, Expression> expression, List list, bool hasTooltip = false, string customClickFunctionName = null) where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, proprtyName); var value = string.Format("#:{0}#", proprtyName); return string.Format("
{2}
", GridSelectClass, gridName, html.KretaSelectorForGrid(uniqueName, proprtyName, value, expression, list, hasTooltip, customClickFunctionName).ToHtmlString()); } public static string ComboBoxForColumnTemplate(this GridBuilder gridBuilder, HtmlHelper html, Expression> expression, string url) where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, proprtyName); var value = string.Format("#:{0}#", proprtyName); return string.Format("
{2}
", GridSelectClass, gridName, html.KretaDropdownList(uniqueName, url).ToClientTemplate().ToHtmlString()); } public static string ComboBoxForColumnTemplateWidthValue(this GridBuilder gridBuilder, HtmlHelper html, Expression> expression, string url, string changeEvent = "") where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, proprtyName); var value = string.Format("#:{0}#", proprtyName); if (string.IsNullOrWhiteSpace(changeEvent)) { return string.Format("
{2}
", GridSelectClass, gridName, html.KretaDropdownList(uniqueName, url).Value(value).ToClientTemplate().ToHtmlString()); } return string.Format("
{2}
", GridSelectClass, gridName, html.KretaDropdownList(uniqueName, url).Value(value).Events(e => e.DataBound(changeEvent).Change(changeEvent)).ToClientTemplate().ToHtmlString()); } public static string ComboBoxForColumnTemplate(this GridBuilder gridBuilder, HtmlHelper html, string url, Expression> expression, List classList = null, string changeEvent = "") where TDataType : class { return GetComboBoxForColumnTemplate(gridBuilder, html, url, expression, classList, false, changeEvent); } public static string GroupedComboBoxForColumnTemplate(this GridBuilder gridBuilder, HtmlHelper html, string url, Expression> expression, List classList = null, string changeEvent = "") where TDataType : class { return GetComboBoxForColumnTemplate(gridBuilder, html, url, expression, classList, true, changeEvent); } private static string GetComboBoxForColumnTemplate(GridBuilder gridBuilder, HtmlHelper html, string url, Expression> expression, List classList, bool isGrouped, string changeEvent) where TDataType : class { var gridName = gridBuilder.ToComponent().Name; var propertyName = GetProperyNameFromExpression(expression); var id = $"{gridName}_{propertyName}_#=ID#"; var classString = string.Empty; if (classList != null) { classString = string.Join(" ", classList); } var valueString = string.Format(@"# if ({0} != null) {{##: {0} ##}} #", propertyName); var htmlAttributes = new Dictionary { {"class", classString}, {"value", valueString}, {"data-rowInputName", propertyName} }; var combobox = html.KretaGroupableComboBox(id, url, isGrouped, htmlAttributes); if (!string.IsNullOrWhiteSpace(changeEvent)) { combobox.Events(e => e.DataBound(changeEvent).Change(changeEvent)); } var comboBoxHtmlString = combobox.ToClientTemplate().ToHtmlString(); var result = $"
{comboBoxHtmlString}
"; return result; } /// /// Extension method for the model boolean columns. /// public static GridBuilder CheckBoxColumn(this GridBuilder gridBuilder, string name, Expression> parameter, bool editable = false, string uniqueNameId = null, bool addHeaderTitle = false) where TDataType : class { gridBuilder.Columns(c => c.Template(t => t.ToString()) .ClientTemplate( CheckBoxColumnTemplate(gridBuilder, name, parameter, editable, uniqueNameId) ) .HeaderTemplate(addHeaderTitle ? "" + name + "" : "")); return gridBuilder; } public static string CheckBoxColumnTemplate(this GridBuilder gridBuilder, string name, Expression> parameter, bool editable = false, string uniqueNameId = null) where TDataType : class { var fieldName = ExpressionHelper.GetExpressionText(parameter); var checkboxTemplate = ""; var gridName = gridBuilder.ToComponent().Name; string uniqueNameTemplate = "{0}_{1}_"; if (string.IsNullOrWhiteSpace(uniqueNameId)) uniqueNameTemplate += "#=ID#"; else uniqueNameTemplate += "#=" + uniqueNameId + "#"; var uniqueName = string.Format(uniqueNameTemplate, gridBuilder.ToComponent().Name, name); var g = string.Format("
{2}
", CheckboxClass, gridName, string.Format(checkboxTemplate, uniqueName, name, editable ? string.Empty : "disabled='disabled' ")); return g; } /// /// Select check box for data rows /// public static GridBuilder SelectBoxColumn(this GridBuilder gridBuilder, HtmlHelper html, int title, bool isTrue = false) where TDataType : class { var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, "chk"); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Width(28) .Title(html.KretaCheckBox(gridName + "_chk", StringResourcesUtil.GetString(title), isTrue, true, new Dictionary() { { "class", SelectCheckboxClass }, { "onClick", "KretaGridHelper.selectAll($(this),'" + gridName + "')" } }).ToClientTemplate().ToHtmlString()) .HeaderHtmlAttributes(new { @class = HeaderSelectCheckboxClass }) .HtmlAttributes(new { @class = SelectCheckboxClass, @data_inputParentGrid = gridName }).ClientTemplate( html.KretaCheckBox(uniqueName, string.Empty, isTrue, true, new Dictionary() { { "data-selectGroup", gridName }, { "data-rowInputName", "chk" } }).ToClientTemplate().ToHtmlString() )); return gridBuilder; } public static GridBuilder SelectBoxColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, bool isTrue = false, int width = 28) where TDataType : class { var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, "chk"); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Width(width) .Title(html.KretaCheckBox(gridName + "_chk", title, isTrue, true, new Dictionary() { { "class", SelectCheckboxClass }, { "onClick", "KretaGridHelper.selectAll($(this),'" + gridName + "')" } }).ToClientTemplate().ToHtmlString()) .HeaderHtmlAttributes(new { @class = HeaderSelectCheckboxClass }) .HtmlAttributes(new { @class = SelectCheckboxClass, @data_inputParentGrid = gridName }).ClientTemplate( html.KretaCheckBox(uniqueName, string.Empty, isTrue, true, new Dictionary() { { "data-selectGroup", gridName }, { "data-rowInputName", "chk" } }).ToClientTemplate().ToHtmlString() )); return gridBuilder; } public static GridBuilder SelectBoxColumnByUID(this GridBuilder gridBuilder, HtmlHelper html, string title, bool isTrue = false, int width = 28) where TDataType : class { var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=uid#", gridName, "chk"); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Width(width) .Title(html.KretaCheckBox(gridName + "_chk", title, isTrue, true, new Dictionary() { { "class", SelectCheckboxClass }, { "onClick", "KretaGridHelper.selectAll($(this),'" + gridName + "')" } }).ToClientTemplate().ToHtmlString()) .HeaderHtmlAttributes(new { @class = HeaderSelectCheckboxClass }) .HtmlAttributes(new { @class = SelectCheckboxClass, @data_inputParentGrid = gridName }).ClientTemplate( html.KretaCheckBox(uniqueName, string.Empty, isTrue, true, new Dictionary() { { "data-selectGroup", gridName }, { "data-rowInputName", "chk" } }).ToClientTemplate().ToHtmlString() )); return gridBuilder; } public static GridBuilder TextBoxForColumn(this GridBuilder gridBuilder, HtmlHelper html, int title, Expression> expression, Dictionary htmlAttr = null, int? width = null) where TDataType : class { gridBuilder.TextBoxForColumn(html, StringResourcesUtil.GetString(title), expression, htmlAttr, width); return gridBuilder; } public static GridBuilder TextBoxForColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, Expression> expression, Dictionary htmlAttr = null, int? width = null) where TDataType : class { if (width == null) { width = 0; } gridBuilder.Columns(c => c.Template(t => t.ToString()) .Width(width.Value) .Title(title) .ClientTemplate( gridBuilder.TextBoxForColumnTemplate(html, expression, htmlAttr) )); return gridBuilder; } public static GridBuilder TextAreaForColumn(this GridBuilder gridBuilder, HtmlHelper html, int title, Expression> expression, int? width = null) where TDataType : class { gridBuilder.TextAreaForColumn(html, StringResourcesUtil.GetString(title), expression, width); return gridBuilder; } public static GridBuilder TextAreaForColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, Expression> expression, int? width = null) where TDataType : class { if (width == null) { width = 0; } gridBuilder.Columns(c => c.Template(t => t.ToString()) .Width(width.Value) .Title(title) .ClientTemplate( gridBuilder.TextAreaForColumnTemplate(html, expression) )); return gridBuilder; } public static GridBuilder NumericBoxForColumn(this GridBuilder gridBuilder, HtmlHelper html, int title, Expression> expression, int? min = null, int? max = null, int? precision = null, int? width = null) where TDataType : class { gridBuilder.NumericBoxForColumn(html, StringResourcesUtil.GetString(title), expression, min, max, precision, width); return gridBuilder; } public static GridBuilder NumericBoxForColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, Expression> expression, int? min = null, int? max = null, int? precision = null, int? width = null) where TDataType : class { if (width == null) { width = 0; } gridBuilder.Columns(c => c.Template(t => t.ToString()) .Width(width.Value) .Title(title) .ClientTemplate( gridBuilder.NumericBoxForColumnTemplate(html, expression, min, max, precision) )); return gridBuilder; } public static GridBuilder DropDownColumn(this GridBuilder gridBuilder, HtmlHelper html, string name, int title, string url, string dataTextField = "Text", string datavalueField = "Value", string groupName = null, Type groupType = null) where TDataType : class { var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, name); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(StringResourcesUtil.GetString(title)) .HtmlAttributes(new { @class = DropDownClass, @data_inputParentGrid = gridName, @data_dropdownUrl = url, @data_uddlId = uniqueName }).ClientTemplate( html.KretaDropdownList(uniqueName, null, dataTextField, datavalueField, groupName, groupType).HtmlAttributes(new Dictionary() { { "data-DropdownGroup", string.Format("{0}_{1}", gridName, name) }, { "data-rowInputName", name } }).ToClientTemplate().ToHtmlString() )); return gridBuilder; } public static GridBuilder DropDownForColumn(this GridBuilder gridBuilder, HtmlHelper html, int title, string url, Expression> expression, string dataTextField = "Text", string datavalueField = "Value", string groupName = null, Type groupType = null) where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, proprtyName); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(StringResourcesUtil.GetString(title)) .HtmlAttributes(new { @class = DropDownClass, @data_inputParentGrid = gridName, @data_dropdownUrl = url, @data_uddlId = uniqueName }).ClientTemplate( html.KretaDropdownList(uniqueName, null, dataTextField, datavalueField, groupName, groupType).HtmlAttributes(new Dictionary() { {"data-DropdownGroup", string.Format("{0}_{1}", gridName, proprtyName)}, {"value", string.Format("#:{0}#", proprtyName)}, {"data-rowInputName", proprtyName} }).ToClientTemplate().ToHtmlString() )); return gridBuilder; } public static GridBuilder ComboBoxForColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, string url, Expression> expression, string dataTextField = "Text", string datavalueField = "Value", string groupName = null, Type groupType = null, string customClass = null, bool checkZeroValue = false, string placeholder = null) where TDataType : class { var propertyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, propertyName); var valueString = checkZeroValue ? string.Format(@"# if ({0} != null && {0} != 0) {{##: {0} ##}} #", propertyName) : string.Format(@"# if ({0} != null) {{##: {0} ##}} #", propertyName); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(title) .HtmlAttributes(new { @class = DropDownClass, @data_inputParentGrid = gridName, @data_dropdownUrl = url, @data_uddlId = uniqueName }).ClientTemplate( html.KretaComboBox(uniqueName, url, dataTextField, datavalueField, placeholder, groupName, groupType).HtmlAttributes(new Dictionary() { {"data-DropdownGroup", string.Format("{0}_{1}", gridName, propertyName)}, {"value", valueString}, {"data-rowInputName", propertyName}, {"class", customClass}, }).ToClientTemplate().ToHtmlString() )); return gridBuilder; } [Obsolete(Core.Constants.General.Obsolete)] public static GridBuilder ComboBoxForColumn(this GridBuilder gridBuilder, HtmlHelper html, int title, IEnumerable selectList, Expression> expression, string dataTextField = "Text", string datavalueField = "Value", string groupName = null, Type groupType = null, List classList = null) where TDataType : class { var propertyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = $"{gridName}_{propertyName}_#=ID#"; var classString = ""; if (classList != null) { classString = string.Join(" ", classList); } var valueString = string.Format(@"# if ({0} != null) {{##: {0} ##}} #", propertyName); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(StringResourcesUtil.GetString(title)) .HtmlAttributes(new { data_inputParentGrid = gridName, data_uddlId = uniqueName }).ClientTemplate( html.KretaComboBox(uniqueName, selectList, new Dictionary { {"class", classString}, {"value", valueString}, {"data-rowInputName", propertyName} }).ToClientTemplate().ToHtmlString() )); return gridBuilder; } public static GridBuilder ComboBoxForColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, IEnumerable selectList, Expression> expression, string dataTextField = "Text", string datavalueField = "Value", string groupName = null, Type groupType = null, List classList = null, int? width = null) where TDataType : class { var propertyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = $"{gridName}_{propertyName}_#=ID#"; var classString = ""; if (classList != null) { classString = string.Join(" ", classList); } if (width == null) { width = 0; } var valueString = string.Format(@"# if ({0} != null) {{##: {0} ##}} #", propertyName); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Width(width.Value) .Title(title) .HtmlAttributes(new { data_inputParentGrid = gridName, data_uddlId = uniqueName }).ClientTemplate( html.KretaComboBox(uniqueName, selectList, new Dictionary { {"class", classString}, {"value", valueString}, {"data-rowInputName", propertyName} }).ToClientTemplate().ToHtmlString() )); return gridBuilder; } [Obsolete("Ehelyett a metódus helyet használd a string title paraméterrel rendelkező metódust!")] public static GridBuilder TimePickerForColumn(this GridBuilder gridBuilder, HtmlHelper html, int title, Expression> expression, int interval = 5, DateTime? minimum = null, DateTime? maximum = null) where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, proprtyName); var sb = new StringBuilder(); sb.AppendFormat("#if(CommonUtils.isNullOrUndefined({0})){{#", proprtyName); sb.Append(html.KretaTimePicker(uniqueName, interval: interval, minValue: minimum, maxValue: maximum, htmlAttributes: new Dictionary() { {"value", ""}, {"data-rowInputName", proprtyName} }).ToClientTemplate().ToHtmlString()); sb.Append("#} else {#"); sb.Append(html.KretaTimePicker(uniqueName, interval: interval, minValue: minimum, maxValue: maximum, htmlAttributes: new Dictionary() { {"value", string.Format("#:{0}#", proprtyName)}, {"data-rowInputName", proprtyName} }).ToClientTemplate().ToHtmlString()); sb.Append("#}#"); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(StringResourcesUtil.GetString(title)) .HtmlAttributes(new { @class = TimePickerClass, @data_inputParentGrid = gridName }).ClientTemplate(sb.ToString())); return gridBuilder; } public static GridBuilder TimePickerForColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, Expression> expression, int interval = 5, DateTime? minimum = null, DateTime? maximum = null) where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = string.Format("{0}_{1}_#=ID#", gridName, proprtyName); var sb = new StringBuilder(); sb.AppendFormat("#if(CommonUtils.isNullOrUndefined({0})){{#", proprtyName); sb.Append(html.KretaTimePicker(uniqueName, interval: interval, minValue: minimum, maxValue: maximum, htmlAttributes: new Dictionary() { {"value", ""}, {"data-rowInputName", proprtyName} }).ToClientTemplate().ToHtmlString()); sb.Append("#} else {#"); sb.Append(html.KretaTimePicker(uniqueName, interval: interval, minValue: minimum, maxValue: maximum, htmlAttributes: new Dictionary() { {"value", string.Format("#:{0}#", proprtyName)}, {"data-rowInputName", proprtyName} }).ToClientTemplate().ToHtmlString()); sb.Append("#}#"); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(title) .HtmlAttributes(new { @class = TimePickerClass, @data_inputParentGrid = gridName }).ClientTemplate(sb.ToString())); return gridBuilder; } public static GridBuilder DatePickerForColumn(this GridBuilder gridBuilder, HtmlHelper html, int title, Expression> expression, DateTime? minimum = null, DateTime? maximum = null) where TDataType : class { gridBuilder.DatePickerForColumn(html, StringResourcesUtil.GetString(title), expression, minimum, maximum); return gridBuilder; } public static GridBuilder DatePickerForColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, Expression> expression, DateTime? minimum = null, DateTime? maximum = null) where TDataType : class { var proprtyName = GetProperyNameFromExpression(expression); var gridName = gridBuilder.ToComponent().Name; var uniqueName = $"{gridName}_{proprtyName}_#=ID#"; var sb = new StringBuilder(); sb.AppendFormat("#if(CommonUtils.isNullOrUndefined({0})){{#", proprtyName); sb.Append(html.KretaDatePicker(uniqueName, minValue: minimum, maxValue: maximum, htmlAttributes: new Dictionary { {"value", ""}, {"data-rowInputName", proprtyName} }).ToClientTemplate().ToHtmlString()); sb.Append("#} else {#"); sb.Append(html.KretaDatePicker(uniqueName, minValue: minimum, maxValue: maximum, htmlAttributes: new Dictionary { {"value", $"#:{proprtyName}#"}, {"data-rowInputName", proprtyName} }).ToClientTemplate().ToHtmlString()); sb.Append("#}#"); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(title) .HtmlAttributes(new { @class = TimePickerClass, data_inputParentGrid = gridName }).ClientTemplate( sb.ToString() )); return gridBuilder; } public static GridBuilder SelectForColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, Expression> expression, List list, bool hasTooltip = false, int? width = null, Dictionary additionatHeaderHtmlAttributes = null) where TDataType : class { gridBuilder.SelectForColumn(html, title, expression, list.Select(x => new ExtendedSelectListItem(x)).ToList(), hasTooltip, width, additionatHeaderHtmlAttributes); return gridBuilder; } public static GridBuilder SelectForColumn(this GridBuilder gridBuilder, HtmlHelper html, string title, Expression> expression, List list, bool hasTooltip = false, int? width = null, Dictionary additionatHeaderHtmlAttributes = null) where TDataType : class { if (width == null) { width = 0; } var headerHtmlAttributes = new Dictionary(); if (additionatHeaderHtmlAttributes != null) { headerHtmlAttributes.AddRange(additionatHeaderHtmlAttributes); } gridBuilder.Columns(c => c.Template(t => t.ToString()) .Width(width.Value) .Title(title) .ClientTemplate( gridBuilder.SelectForColumnTemplate(html, expression, list, hasTooltip) ) .HeaderHtmlAttributes(headerHtmlAttributes)); return gridBuilder; } public static GridBuilder ConditionColumn(this GridBuilder gridBuilder, int title, Expression> conditionExpression, string trueTemplate, string falseTemplate) where TDataType : class { gridBuilder.ConditionColumn(StringResourcesUtil.GetString(title), conditionExpression, trueTemplate, falseTemplate); return gridBuilder; } public static GridBuilder ConditionColumn(this GridBuilder gridBuilder, string title, Expression> conditionExpression, string trueTemplate, string falseTemplate) where TDataType : class { var proprtyName = GetProperyNameFromExpression(conditionExpression); var sb = new StringBuilder(); sb.AppendFormat("#if({0}){{#", proprtyName); sb.Append(trueTemplate); sb.Append("#}else{#"); sb.Append(falseTemplate); sb.Append("#}#"); gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(title) .ClientTemplate(sb.ToString())); return gridBuilder; } public static GridBuilder ConditionColumn(this GridBuilder gridBuilder, int title, Expression> conditionExpression, string trueTemplate, string falseTemplate, int width) where TDataType : class { gridBuilder.ConditionColumn(StringResourcesUtil.GetString(title), conditionExpression, trueTemplate, falseTemplate, width); return gridBuilder; } public static GridBuilder ConditionColumn(this GridBuilder gridBuilder, string title, Expression> conditionExpression, string trueTemplate, string falseTemplate, int width, Dictionary additionatHeaderHtmlAttributes = null) where TDataType : class { var proprtyName = GetProperyNameFromExpression(conditionExpression); var sb = new StringBuilder(); sb.AppendFormat("#if({0}){{#", proprtyName); sb.Append(trueTemplate); sb.Append("#}else{#"); sb.Append(falseTemplate); sb.Append("#}#"); var headerHtmlAttributes = new Dictionary(); if (additionatHeaderHtmlAttributes != null) { headerHtmlAttributes.AddRange(additionatHeaderHtmlAttributes); } gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(title) .ClientTemplate(sb.ToString()) .Width(width) .HeaderHtmlAttributes(headerHtmlAttributes)); return gridBuilder; } public static GridBuilder TemplateColumn(this GridBuilder gridBuilder, string title, string template, int width, Dictionary additionatHeaderHtmlAttributes = null, string header = null) where TDataType : class { var stringBuilder = new StringBuilder(); stringBuilder.Append(template); var headerHtmlAttributes = new Dictionary(); if (additionatHeaderHtmlAttributes != null) { headerHtmlAttributes.AddRange(additionatHeaderHtmlAttributes); } gridBuilder.Columns(c => c.Template(t => t.ToString()) .Title(title) .ClientTemplate(stringBuilder.ToString()) .Width(width) .HeaderHtmlAttributes(headerHtmlAttributes) .HeaderTemplate(header) ); return gridBuilder; } private static string GetToolbarHtml(string gridName, HtmlHelper html, bool isPageble, int pageSizes, bool isMultipleGrid = false, bool allowExcelExport = false, bool allowPDFExport = false, string exportColumnUrl = null, string exportDataUrl = null, bool mustShowPagerCount = true, string excelExportFileName = null, bool popupExport = false) { var pagingTemplate = string.Empty; if (isPageble) { var itemlist = new List() { new SelectListItem { Text = "100" }, new SelectListItem { Text = "200" }, new SelectListItem { Text = "500" } }; foreach (var item in itemlist) { if (item.Text == pageSizes.ToString()) item.Selected = true; } var dropdown = html.KretaDropdownList(gridName + "_PageSize", itemlist, new Dictionary { { "title", StringResourcesUtil.GetString(4486) } }); pagingTemplate = string.Format(PagerToolbarTemplate, dropdown.ToHtmlString(), StringResourcesUtil.GetString(3483), StringResourcesUtil.GetString(3484), mustShowPagerCount ? "mustShowPagerCount" : ""); } var excelExportTemplate = string.Empty; var PDFExportTemplate = string.Empty; if (allowExcelExport) { excelExportTemplate = string.Format(ExcelExportToolbarTemplate, StringResourcesUtil.GetString(182), gridName, excelExportFileName + ".xlsx", popupExport.ToString().ToLower()); } if (allowPDFExport) { PDFExportTemplate = string.Format(PdfExportToolbarTemplate, StringResourcesUtil.GetString(4485)); } string openAllGrid = string.Format(@" ", StringResourcesUtil.GetString(4487)); return string.Format(ToolbarTemplate, pagingTemplate, excelExportTemplate, PDFExportTemplate, isMultipleGrid ? openAllGrid : string.Empty); } private static string GetProperyNameFromExpression(Expression> expression) { try { var body = expression.Body as UnaryExpression; string proprtyName; if (body != null) { proprtyName = ((MemberExpression)(expression.Body as UnaryExpression).Operand).Member.Name; } else { proprtyName = ModelMetadata.FromLambdaExpression(expression, new ViewDataDictionary()).PropertyName; } return proprtyName; } catch { return string.Empty; } } public static GridBoundColumnBuilder SetDisplayProperty(this GridBoundColumnBuilder helper, string clientTemplateProperty) where TFirstLevelType : class { GridBoundColumnBuilder result = helper.ClientTemplate($@"#if ({clientTemplateProperty} == null) {{##:''##}} else {{##:{clientTemplateProperty}##}}#"); return result; } public static GridBoundColumnBuilder SetDisplayPropertyWithToolip(this GridBoundColumnBuilder helper, string clientTemplateProperty, string clientTemplateTooltipProperty = null, string additionalClasses = null) where TFirstLevelType : class { var templateText = $@"#if ({clientTemplateProperty} == null) {{##:''##}} else {{##:{clientTemplateProperty}##}}#"; string tooltipTemplateText = string.IsNullOrWhiteSpace(clientTemplateTooltipProperty) ? templateText : $@"#if ({clientTemplateTooltipProperty} == null) {{##:''##}} else {{##:{clientTemplateTooltipProperty}##}}#"; GridBoundColumnBuilder result = helper .ClientTemplate($@"{templateText}") .HtmlAttributes(string.IsNullOrWhiteSpace(additionalClasses) ? new { @class = "kretaEllipsis kretaTooltipDefaultClass" } : new { @class = $"kretaEllipsis kretaTooltipDefaultClass {additionalClasses}" }); return result; } public static GridBoundColumnBuilder SetHtmlDisplayPropertyWithToolip(this GridBoundColumnBuilder helper, string clientTemplateProperty, string tooltipClassName, string tooltipDataAttributeName, string additionalClasses = null) where TFirstLevelType : class { var templateText = $@"#if ({clientTemplateProperty} == null) {{##:''##}} else {{##={clientTemplateProperty}##}}#"; GridBoundColumnBuilder result = helper .ClientTemplate($"{templateText}") .HtmlAttributes(string.IsNullOrWhiteSpace(additionalClasses) ? new { @class = "kretaEllipsis " } : new { @class = $"kretaEllipsis {additionalClasses}" }); return result; } public static GridBoundColumnBuilder SetClientTemplateWithToolip(this GridBoundColumnBuilder helper, string clientTemplateFormat, string clientTemplateEmptyCondition, string clientTemplateTooltipFormat = null, string clientTemplateTooltipEmptyCondition = null, string additionalClasses = null) where TFirstLevelType : class { var templateText = !string.IsNullOrWhiteSpace(clientTemplateEmptyCondition) ? $@"#if ({clientTemplateEmptyCondition}) {{##:''##}} else {{#{clientTemplateFormat}#}}#" : $@"{clientTemplateFormat}"; string tooltipTemplateText = string.IsNullOrWhiteSpace(clientTemplateTooltipFormat) ? templateText : !string.IsNullOrWhiteSpace(clientTemplateTooltipEmptyCondition) ? $@"#if ({clientTemplateTooltipEmptyCondition}) {{##:''##}} else {{#{clientTemplateTooltipFormat}#}}#" : $@"{clientTemplateTooltipFormat}"; GridBoundColumnBuilder result = helper .ClientTemplate($@"{templateText}") .HtmlAttributes(string.IsNullOrWhiteSpace(additionalClasses) ? new { @class = "kretaEllipsis kretaTooltipDefaultClass" } : new { @class = $"kretaEllipsis kretaTooltipDefaultClass {additionalClasses}" }); return result; } #region Formázások /// /// A dátumok formázza a gridben. /// public static string DateFormat { get { return "{0:d}"; } } public static string DateTimeFormat { get { return "{0:g}"; } } public static string DateTimeFormatLong { get { return "{0:G}"; } } public static string MoneyFormat { get { return "{0:C0}"; } } public static string NumberFormat { get { return "{0:N0}"; } } public static string TimeFormat { get { return "{0:t}"; } } public static string MoneyTemplate(string propName) { return string.Format("<#: {0} #> Ft", propName); } public static string PrecisionFormat(int precision) { return string.Format("{{0:0.{0}}}", string.Empty.PadRight(precision, '#')); } #endregion Formázások } }