FilterBoolean <TSourceData, TTableData>( this ColumnUsage <TSourceData, TTableData, bool> column, Expression <Func <TSourceData, bool> > sourceColumn, string trueText, string falseText, string bothText = null, bool allowBoth = true, Action <ColumnPluginConfigurationWrapper <SelectFilterUiConfig, bool> > ui = null ) where TTableData : new() { var items = new[] { new SelectListItem { Text = trueText, Value = "True" }, new SelectListItem { Text = falseText, Value = "False" } }; var cf = column.FilterSelect(sourceColumn, v => { v.SelectAny(allowBoth, bothText).SelectItems(items); if (ui != null) { ui(v); } }); return(cf); }
/// <summary> /// Shortcut for creating JS function that formats enum-typed column values to specified text specified using enum's fields [Display] attribute. /// This method uses MVC GetSelectList function to retrieve enum values. /// </summary> /// <param name="column">Colum to apply formatting</param> /// <param name="content">Content for particular select list item</param> /// <returns>Fluent</returns> public static ColumnUsage <TSourceData, TTableData, TTableColumn> FormatEnumWithDisplayAttribute <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Action <Template, SelectListItem> content ) where TTableData : new() { var enumType = typeof(TTableColumn); if (typeof(Nullable <>).IsAssignableFrom(enumType)) { enumType = enumType.GetGenericArguments()[0]; } if (!typeof(Enum).IsAssignableFrom(enumType)) { throw new Exception( String.Format("This method is only applicable for enum columns. {0} column of table {1} is not of enum type", column.ColumnProperty.Name, typeof(TTableData).FullName )); } var items = EnumHelper.GetSelectList(enumType); column.Template(a => a.EmptyIfNotPresent(column.ColumnConfiguration.RawColumnName) .Switch("{" + column.ColumnConfiguration.RawColumnName + "}", swtch => swtch .Cases(items, c => c.Value, (tpl, v) => content(tpl.Content(v.Text), v)) .DefaultEmpty() ) ); return(column); }
/// <summary> /// Attaches UI for Range filter to specified column. /// UI frontend for this filter (by default) is 2 text inputs specifying min and max value. /// </summary> /// <param name="column">Column</param> /// <param name="ui">Filter UI builder</param> /// <returns>Fluent</returns> public static void FilterRangeUi <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Action <ColumnPluginConfigurationWrapper <RangeFilterUiConfig, TTableColumn> > ui = null ) where TTableData : new() { column.UpdateFilterConfig(PluginId, ui); }
OrderableNoUi <TSourceData, TTableData, TTableColumn, TSourceColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Expression <Func <TSourceData, TSourceColumn> > expresion) where TTableData : new() { column.Configurator.RegisterOrderingExpression(column.ColumnProperty, expresion); return(column); }
/// <summary> /// Attaches Range filter to specified column without UI /// Range column filter supports 2 values (min. and max.) to be specified. /// This filter filters out source query leaving records that are having value denoted by column that is in specified range (between min. and max.) /// </summary> /// <param name="column">Column</param> /// <param name="filterDelegate">Filtering delegate</param> /// <returns>Fluent</returns> public static RangeColumnFilter <TSourceData, TTableColumn> FilterRangeNoUiBy <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Func <IQueryable <TSourceData>, RangeTuple <TTableColumn>, IQueryable <TSourceData> > filterDelegate) where TTableData : new() { var filter = RangeColumnFilter <TSourceData, TTableColumn> .Create(column.ColumnProperty, column.Configurator, filterDelegate); column.Configurator.RegisterFilter(filter); return(filter); }
/// <summary> /// Shortcut for formatting table cell as link for specified column /// </summary> /// <typeparam name="TSourceData"></typeparam> /// <typeparam name="TTableData"></typeparam> /// <typeparam name="TTableColumn"></typeparam> /// <param name="col">Column</param> /// <param name="linkFormat">Link format. Use " + v.Something + " or "{Something}" to substitute table value</param> /// <param name="textFormat">Link text format. Use " + v.Something + " or "{Something}" to substitute table value</param> /// <param name="target">Link target. User "_blank" or something similar.</param> /// <returns>Fluent</returns> public static ColumnUsage <TSourceData, TTableData, TTableColumn> Link <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> col, string linkFormat, string textFormat, string target = null) where TTableData : new() { return(col.Template(c => { c.EmptyIfNotPresent(col.ColumnConfiguration.RawColumnName); c.Returns(a => a.Tag("a").Attr("href", linkFormat).Content(textFormat).Attr("target", target)); })); }
Orderable <TSourceData, TTableData, TTableColumn, TSourceColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Expression <Func <TSourceData, TSourceColumn> > expresion, Action <OrderingUiConfigurationBuilder> ui = null) where TTableData : new() { OrderableNoUi(column, expresion); OrderableUi(column, ui); return(column); }
/// <summary> /// Attaches Range filter to specified column. /// Range column filter supports 2 values (min. and max.) to be specified. /// This filter filters out source query leaving records that are having value denoted by column that is in specified range (between min. and max.) /// </summary> /// <param name="column">Column</param> /// <param name="sourceColumn">Matching source column to be filtered</param> /// <returns>Fluent</returns> public static RangeColumnFilter <TSourceData, TSourceColumn> FilterRangeNoUi <TSourceData, TTableData, TTableColumn, TSourceColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Expression <Func <TSourceData, TSourceColumn> > sourceColumn ) where TTableData : new() { var filter = RangeColumnFilter <TSourceData, TSourceColumn> .Create(column.ColumnProperty, column.Configurator, sourceColumn); column.Configurator.RegisterFilter(filter); return(filter); }
/// <summary> /// Attaches select list filter to specified column /// </summary> /// <param name="column">Column</param> /// <param name="sourceColumn">Corresponding source column</param> /// <param name="ui">UI builder</param> /// <returns>Filter fluent</returns> public static ValueColumnFilter <TSourceData, TSourceColumn> FilterSelect <TSourceData, TTableData, TTableColumn, TSourceColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Expression <Func <TSourceData, TSourceColumn> > sourceColumn, Action <ColumnPluginConfigurationWrapper <SelectFilterUiConfig, TTableColumn> > ui = null) where TTableData : new() { var filter = column.FilterValueNoUi(sourceColumn); FilterSelectUi(column, ui); return(filter); }
/// <summary> /// Attaches select list filter to specified column /// </summary> /// <param name="column">Column</param> /// <param name="filterDelegate">Filtering function base on value received from filter</param> /// <param name="ui">UI builder</param> /// <returns>Filter fluent</returns> public static ValueColumnFilter <TSourceData, TTableColumn> FilterSelectBy <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Func <IQueryable <TSourceData>, TTableColumn, IQueryable <TSourceData> > filterDelegate, Action <ColumnPluginConfigurationWrapper <SelectFilterUiConfig, TTableColumn> > ui = null) where TTableData : new() { var filter = column.FilterValueNoUiBy(filterDelegate); FilterSelectUi(column, ui); return(filter); }
/// <summary> /// Attaches Range filter to specified column. /// Range column filter supports 2 values (min. and max.) to be specified. /// This filter filters out source query leaving records that are having value denoted by column that is in specified range (between min. and max.) /// UI frontend for this filter (by default) is 2 text inputs specifying min and max value. /// </summary> /// <param name="column">Column</param> /// <param name="sourceColumn">Matching source column to be filtered</param> /// <param name="ui">Filter UI builder</param> /// <returns>Fluent</returns> public static RangeColumnFilter <TSourceData, TSourceColumn> FilterRange <TSourceData, TTableData, TTableColumn, TSourceColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Expression <Func <TSourceData, TSourceColumn> > sourceColumn, Action <ColumnPluginConfigurationWrapper <RangeFilterUiConfig, TTableColumn> > ui = null ) where TTableData : new() { var filter = FilterRangeNoUi(column, sourceColumn); FilterRangeUi(column, ui); return(filter); }
/// <summary> /// Attaches Range filter to specified column. /// Range column filter supports 2 values (min. and max.) to be specified. /// This filter filters out source query leaving records that are having value denoted by column that is in specified range (between min. and max.) /// UI frontend for this filter (by default) is 2 text inputs specifying min and max value. /// </summary> /// <param name="column">Column</param> /// <param name="filterDelegate">Filtering delegate</param> /// <param name="ui">Filter UI builder</param> /// <returns>Fluent</returns> public static RangeColumnFilter <TSourceData, TTableColumn> FilterRangeBy <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Func <IQueryable <TSourceData>, RangeTuple <TTableColumn>, IQueryable <TSourceData> > filterDelegate, Action <ColumnPluginConfigurationWrapper <RangeFilterUiConfig, TTableColumn> > ui = null ) where TTableData : new() { var filter = FilterRangeNoUiBy(column, filterDelegate); FilterRangeUi(column, ui); return(filter); }
/// <summary> /// Renders configured template in specified column. /// You can use {field} syntax to include specific table column value. /// Use `{field} + 10` to embed JS expression inside template. Code in `'s will /// be included to template without chages /// </summary> /// <typeparam name="TSourceData"></typeparam> /// <typeparam name="TTableData"></typeparam> /// <typeparam name="TTableColumn"></typeparam> /// <param name="col">Column</param> /// <param name="elementsConf">Cell template builder</param> /// <returns>Fluent</returns> public static ColumnUsage <TSourceData, TTableData, TTableColumn> Template <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> col, Action <CellTemplateBuilder> elementsConf) where TTableData : new() { CellTemplateBuilder ctb = new CellTemplateBuilder(); elementsConf(ctb); var fun = ctb.Build(); col.TemplateFunction(fun); return(col); }
/// <summary> /// Shortcut for creating JS function that formats boolean column values to specified text /// </summary> /// <typeparam name="TSourceData"></typeparam> /// <typeparam name="TTableData"></typeparam> /// <param name="column">Column</param> /// <param name="trueText">Text when value is TRUE</param> /// <param name="falseText">Text when value is FALSE</param> /// <returns>Fluent</returns> public static ColumnUsage <TSourceData, TTableData, bool> TextForBoolean <TSourceData, TTableData>( this ColumnUsage <TSourceData, TTableData, bool> column, string trueText, string falseText ) where TTableData : new() { column.Template( tpl => tpl.ReturnsIf("{" + column.ColumnConfiguration.RawColumnName + "}", v => v.Content(trueText), v => v.Content(falseText))); return(column); }
/// <summary> /// Attaches Multi-Select filter to column /// </summary> /// <param name="column">Column configuration</param> /// <param name="filterDelegate">Filtering function base on value received from filter</param> /// <returns></returns> public static MultiColumnFilter <TSourceData, TSourceColumn> FilterMultiSelectNoUiBy <TSourceData, TTableData, TTableColumn, TSourceColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Func <IQueryable <TSourceData>, IEnumerable <TSourceColumn>, IQueryable <TSourceData> > filterDelegate) where TTableData : new() { var filter = MultiColumnFilter <TSourceData, TSourceColumn> .Create(column.ColumnProperty, column.Configurator, filterDelegate); var configurator = column; configurator.TableConfigurator.RegisterFilter(filter); return(filter); }
/// <summary> /// Initializes a new instance of the <see cref="ColumnSchema"/> class. /// </summary> public ColumnSchema( string columnName, string selectName, string parameterName, ColumnUsage usage, DbTypeEx columnType) { this.ColumnName = columnName; this.SelectName = selectName; this.ParameterName = parameterName; this.Usage = usage; this.ColumnType = columnType; }
OrderableUi <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Action <OrderingUiConfigurationBuilder> ui = null) where TTableData : new() { column.TableConfigurator.TableConfiguration.UpdatePluginConfig <OrderingConfiguration>(PluginId, c => { OrderingUiConfigurationBuilder cc = new OrderingUiConfigurationBuilder(c, column.ColumnProperty.Name); if (ui != null) { ui(cc); } }); return(column); }
/// <summary> /// Attaches simple value filter to column. /// Value column filter supports specifying only one value. /// This filter filters out source query leaving records that are having value denoted by column that is equal to specified value in filter. /// </summary> /// <param name="column">Column</param> /// <param name="ui">Filter UI builder</param> /// <returns></returns> public static void FilterValueUi <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Action <ColumnPluginConfigurationWrapper <ValueFilterUiConfig, TTableColumn> > ui = null ) where TTableData : new() { column.UpdateFilterConfig <ValueFilterUiConfig, TTableColumn>(PluginId, a => { a.Placeholder(column.ColumnConfiguration.Title); if (ui != null) { ui(a); } }); }
/// <summary> /// Attaches Multi-Select filter to column /// </summary> /// <param name="column">Column configuration</param> /// <param name="ui">Filter UI builder</param> /// <returns></returns> public static void FilterMultiSelectUi <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, Action <ColumnPluginConfigurationWrapper <SelectFilterUiConfig, TTableColumn> > ui = null ) where TTableData : new() { column.UpdateFilterConfig <SelectFilterUiConfig, TTableColumn>(SelectFilterExtensions.PluginId, c => { if (ui != null) { ui(c); } c.Configuration.AllowSelectNothing = false; c.Configuration.IsMultiple = true; }); }
/// <summary> /// Initializes a new instance of the <see cref="ColumnSchema"/> class. /// </summary> public ColumnSchema( int index, string propertyName, string columnName, string selectName, string parameterName, ColumnUsage usage, DbTypeEx columnType) { this.Index = index; this.PropertyName = propertyName; this.ColumnName = columnName; this.SelectName = selectName; this.ParameterName = parameterName; this.Usage = usage; this.ColumnType = columnType; }
public static ColumnUsage <TSourceData, TTableData, TTableColumn> EditSelectList <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> t, Action <EditorConfigurationWrapper <SelectListEditorUiConfig> > config = null) where TTableData : new() { t.TableConfigurator.TableConfiguration.UpdatePluginConfig <EditorUiConfig>(EditorExtensions.PluginId, c => { var conf = c.Configuration.GetOrReplaceEditorConfig <SelectListEditorUiConfig>( t.ColumnConfiguration.RawColumnName); var wrapper = new EditorConfigurationWrapper <SelectListEditorUiConfig>(conf); if (config != null) { config(wrapper); } }); return(t); }
Hide <TSourceData, TTableData, TTableColumn>( this ColumnUsage <TSourceData, TTableData, TTableColumn> column, bool hide = true, bool initiatesReload = false, string where = null) where TTableData : new() { column.Configurator.TableConfiguration.UpdatePluginConfig <HideoutPluginConfiguration>(PluginId, c => { if (hide) { c.Configuration.HiddenColumns[column.ColumnProperty.Name] = true; } if (initiatesReload) { c.Configuration.ColumnInitiatingReload.Add(column.ColumnProperty.Name); } }, where); return(column); }
private static void DoDateFormatColumnUsage <TSourceData, TTableData, TTableColumn>(ColumnUsage <TSourceData, TTableData, TTableColumn> col, string format = null, bool utc = false) where TTableData : new() { col.Template( c => c.EmptyIfNotPresent(col.ColumnConfiguration.RawColumnName) .Returns(string.Format("`dateFormat({{{0}}},'{1}',{2})`", col.ColumnConfiguration.RawColumnName, format, utc ? "true" : "false"))); }
/// <summary> /// Shortcut for JS function formatting DateTime column value with dateformat.js /// </summary> /// <param name="col">Column</param> /// <param name="format">dateformat.js-friendly format</param> /// <param name="utc">"utc" parameter to be supplied to dateformat.js</param> public static ColumnUsage <TSourceData, TTableData, DateTime?> FormatDateWithDateformatJs <TSourceData, TTableData>( this ColumnUsage <TSourceData, TTableData, DateTime?> col, string format = null, bool utc = false) where TTableData : new() { DoDateFormatColumnUsage(col, format, utc); return(col); }
/// <summary> /// Make all column cells editable with Checkbox editor. This method is only applicable for nullable-boolean columns /// </summary> /// <param name="t">Column configurator</param> /// <param name="config">UI configuration builder for checkbox editor</param> /// <returns>Fluent</returns> public static ColumnUsage <TSourceData, TTableData, bool?> EditCheck <TSourceData, TTableData>(this ColumnUsage <TSourceData, TTableData, bool?> t, Action <EditorConfigurationWrapper <CheckEditorUiConfig> > config = null) where TTableData : new() { DoCheckConfiguration(t.TableConfigurator.TableConfiguration, config, t.ColumnConfiguration.RawColumnName); return(t); }