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);
 }
Exemple #4
0
 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);
        }
Exemple #6
0
 /// <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));
     }));
 }
Exemple #7
0
 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);
        }
Exemple #9
0
        /// <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);
        }
Exemple #10
0
        /// <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);
        }
Exemple #13
0
        /// <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;
 }
Exemple #17
0
 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);
 }
Exemple #18
0
 /// <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;
 }
Exemple #21
0
        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);
        }
Exemple #22
0
 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);
 }