public static GriddlyFilterList FilterList(this GriddlyColumn column, IEnumerable <SelectListItem> items, bool isMultiple = true, bool defaultSelectAll = false, string nullItemText = null, bool isNoneAll = true, string field = null, string caption = null, string htmlClass = null, string captionPlural = null)
        {
            if (caption == null)
            {
                caption = column.Caption;
            }

            if (field == null)
            {
                field = GetField(column);
            }

            if (string.IsNullOrWhiteSpace(caption))
            {
                throw new ArgumentNullException("caption", "Caption must be specified.");
            }
            if (string.IsNullOrWhiteSpace(field))
            {
                throw new ArgumentNullException("field", "Field must be specified.");
            }

            List <SelectListItem> itemsList = new List <SelectListItem>();

            if (!string.IsNullOrWhiteSpace(nullItemText))
            {
                itemsList.Add(new SelectListItem()
                {
                    Text = nullItemText, Value = ""
                });
            }

            itemsList.AddRange(items);

            List <SelectListItem> selectableItemsList = new List <SelectListItem>();

            selectableItemsList.AddRange(itemsList.Where(x => !(x is SelectListItemGroup)));
            selectableItemsList.AddRange(itemsList.Where(x => x is SelectListItemGroup).SelectMany(x => ((SelectListItemGroup)x).Items));

            var filter = new GriddlyFilterList()
            {
                Field            = field,
                Items            = itemsList,
                SelectableItems  = selectableItemsList,
                Caption          = caption,
                IsMultiple       = isMultiple,
                IsNoneAll        = isNoneAll,
                IsNullable       = !string.IsNullOrWhiteSpace(nullItemText),
                DefaultSelectAll = defaultSelectAll,
                HtmlClass        = htmlClass
            };

            if (captionPlural != null)
            {
                filter.CaptionPlural = captionPlural;
            }

            return(filter);
        }
        static string GetField(GriddlyColumn column)
        {
            string value = null;

            if (column.ExpressionString != null)
            {
                value = column.ExpressionString.Split('.').Last();

                if (value.Length > 1)
                {
                    value = char.ToLower(value[0]) + value.Substring(1);
                }
            }

            return(value);
        }
        public static GriddlyFilterRange FilterRange(this GriddlyColumn column, FilterDataType dataType = FilterDataType.Decimal, string field = null, string fieldEnd = null, string caption = null, string htmlClass = null, string captionPlural = null)
        {
            if (caption == null)
            {
                caption = column.Caption;
            }

            if (field == null)
            {
                field = GetField(column) + "Start";
            }
            if (fieldEnd == null)
            {
                fieldEnd = GetField(column) + "End";
            }

            if (string.IsNullOrWhiteSpace(caption))
            {
                throw new ArgumentNullException("caption", "Caption must be specified.");
            }
            if (string.IsNullOrWhiteSpace(field))
            {
                throw new ArgumentNullException("field", "Field must be specified.");
            }
            if (string.IsNullOrWhiteSpace(fieldEnd))
            {
                throw new ArgumentNullException("fieldEnd", "End field must be specified.");
            }

            var filter = new GriddlyFilterRange()
            {
                Field     = field,
                FieldEnd  = fieldEnd,
                Caption   = caption,
                DataType  = dataType,
                HtmlClass = htmlClass
            };

            if (captionPlural != null)
            {
                filter.CaptionPlural = captionPlural;
            }

            return(filter);
        }
        public GriddlySettings Add(GriddlyColumn column, Func <GriddlyColumn, GriddlyFilter> filter = null)
        {
            if (filter != null)
            {
                GriddlyFilter filterDef = filter(column);

                if (filterDef != null)
                {
                    column.Filter = filterDef;

                    Filters.Add(filterDef);
                }
            }

            Columns.Add(column);

            return(this);
        }
        public override void PopulateSummaryValues(GriddlySettings <T> settings)
        {
            List <GriddlyColumn> summaryColumns = settings.Columns.Where(x => x.SummaryFunction != null).ToList();

            if (summaryColumns.Any())
            {
                StringBuilder aggregateExpression = new StringBuilder();

                aggregateExpression.Append("SELECT ");

                for (int i = 0; i < summaryColumns.Count; i++)
                {
                    if (i > 0)
                    {
                        aggregateExpression.Append(", ");
                    }

                    GriddlyColumn col = summaryColumns[i];

                    aggregateExpression.AppendFormat("{0}({1}) AS _a{2}", col.SummaryFunction, col.ExpressionString, i);
                }

                string sql = string.Format(_outerSqlTemplate,
                                           string.Format("{0} FROM ({1}) [_proj]", aggregateExpression.ToString(), _sql));

                try
                {
                    IDbConnection  cn = _getConnection();
                    IDbTransaction tx = _getTransaction != null?_getTransaction() : null;

                    IDictionary <string, object> item = cn.Query(sql, _param, tx).Single();

                    for (int i = 0; i < summaryColumns.Count; i++)
                    {
                        summaryColumns[i].SummaryValue = item["_a" + i];
                    }
                }
                catch (Exception ex)
                {
                    throw new DapperGriddlyException("Error populating summary values.", sql, _param, ex);
                }
            }
        }
 public static GriddlyFilterList FilterBool(this GriddlyColumn column, string trueLabel = "Yes", string falseLabel = "No", string nullItemText = null, bool isMultiple = false, bool defaultSelectAll = false, bool isNoneAll = false, string field = null, string caption = null, string htmlClass = null, string captionPlural = null)
 {
     return(column.FilterList(BuildBoolItems(trueLabel, falseLabel), isMultiple, defaultSelectAll, nullItemText, isNoneAll, field, caption, htmlClass, captionPlural));
 }
 public static GriddlyFilterList FilterEnum <T>(this GriddlyColumn column, IEnumerable <T> items, bool isMultiple = true, bool defaultSelectAll = false, string nullItemText = null, bool isNoneAll = true, string field = null, string caption = null, string htmlClass = null, string captionPlural = null)
     where T : struct
 {
     return(column.FilterList(Extensions.ToSelectListItems(items).OrderBy(x => x.Text), isMultiple, defaultSelectAll, nullItemText, isNoneAll, field, caption, htmlClass, captionPlural));
 }