public IHtmlString Render(IGridColumn column)
        {
            if (!column.FilterEnabled)
            {
                return(MvcHtmlString.Create(string.Empty));
            }


            //determine current column filter settings
            var filterSettings = new List <ColumnFilterValue>();

            if (_settings.IsInitState && column.InitialFilterSettings != ColumnFilterValue.Null)
            {
                filterSettings.Add(column.InitialFilterSettings);
            }
            else
            {
                filterSettings.AddRange(_settings.FilteredColumns.GetByColumn(column));
            }

            bool isColumnFiltered = filterSettings.Any();

            //determine current url:
            var builder = new CustomQueryStringBuilder(_settings.Context.Request.QueryString);

            var exceptQueryParameters = new List <string>
            {
                QueryStringFilterSettings.DefaultTypeQueryParameter,
                QueryStringFilterSettings.DefaultFilterInitQueryParameter
            };
            string pagerParameterName = GetPagerQueryParameterName(column.ParentGrid.Pager);

            if (!string.IsNullOrEmpty(pagerParameterName))
            {
                exceptQueryParameters.Add(pagerParameterName);
            }

            string url = builder.GetQueryStringExcept(exceptQueryParameters);

            var gridFilterButton = new TagBuilder("span");

            gridFilterButton.AddCssClass(FilterButtonCss);
            if (isColumnFiltered)
            {
                gridFilterButton.AddCssClass(FilteredButtonCssClass);
            }
            gridFilterButton.Attributes.Add("title", Strings.FilterButtonTooltipText);

            var gridFilter  = new TagBuilder("div");
            var dataKeyList = new Dictionary <string, string>
            {
                { "data-type", column.FilterWidgetTypeName },
                { "data-name", column.Name },
                { "data-widgetdata", JsonHelper.JsonSerializer(column.FilterWidgetData) },
                { "data-filterdata", JsonHelper.JsonSerializer(filterSettings) },
                { "data-url", url }
            };

            gridFilter.InnerHtml = gridFilterButton.ToString();
            gridFilter.AddCssClass("grid-filter");
            foreach (var data in dataKeyList)
            {
                if (!string.IsNullOrWhiteSpace(data.Value))
                {
                    gridFilter.Attributes.Add(data.Key, data.Value);
                }
            }

            return(MvcHtmlString.Create(gridFilter.ToString()));
        }
        protected override void OnParametersSet()
        {
            _filterComponents = new QueryDictionary <Type>();
            _filterComponents.Add("System.String", typeof(TextFilterComponent <T>));
            _filterComponents.Add("System.Guid", typeof(TextFilterComponent <T>));
            _filterComponents.Add("System.Int32", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.Double", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.Decimal", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.Byte", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.Single", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.Float", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.Int64", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.Int16", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.UInt64", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.UInt32", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.UInt16", typeof(NumberFilterComponent <T>));
            _filterComponents.Add("System.DateTime", typeof(DateTimeFilterComponent <T>));
            _filterComponents.Add("System.Date", typeof(DateTimeFilterComponent <T>));
            _filterComponents.Add("System.DateTimeOffset", typeof(DateTimeFilterComponent <T>));
            _filterComponents.Add("DateTimeLocal", typeof(DateTimeLocalFilterComponent <T>));
            _filterComponents.Add("System.Boolean", typeof(BooleanFilterComponent <T>));

            if (CustomFilters == null)
            {
                CustomFilters = new QueryDictionary <Type>();
            }
            if (CustomFilters.Any(r => r.Key.Equals(SelectItem.ListFilter)))
            {
                CustomFilters.Remove(SelectItem.ListFilter);
            }
            CustomFilters.Add(SelectItem.ListFilter, typeof(ListFilterComponent <T>));
            foreach (var widget in CustomFilters)
            {
                if (_filterComponents.ContainsKey(widget.Key))
                {
                    _filterComponents[widget.Key] = widget.Value;
                }
                else
                {
                    _filterComponents.Add(widget);
                }
            }

            FirstColumn = (ICGridColumn)Grid.Columns.FirstOrDefault();

            if (OnRowClickedActions != null && OnRowClickedActions.Count() > 0)
            {
                OnRowClicked = OnRowClickedActions.First();
            }

            _hasSubGrid           = Grid.SubGridKeys != null && Grid.SubGridKeys.Length > 0;
            _hasTotals            = Grid.IsSumEnabled || Grid.IsAverageEnabled || Grid.IsMaxEnabled || Grid.IsMinEnabled;
            _requiredTotalsColumn = _hasTotals &&
                                    FirstColumn != null &&
                                    (FirstColumn.IsSumEnabled || FirstColumn.IsAverageEnabled ||
                                     FirstColumn.IsMaxEnabled || FirstColumn.IsMinEnabled);

            InitSubGridVars();

            var queryBuilder          = new CustomQueryStringBuilder(Grid.Settings.SearchSettings.Query);
            var exceptQueryParameters = new List <string> {
                GridPager.DefaultPageSizeQueryParameter
            };

            _changePageSizeUrl = queryBuilder.GetQueryStringExcept(exceptQueryParameters);
            _pageSize          = Grid.Pager.ChangePageSize && Grid.Pager.QueryPageSize > 0 ? Grid.Pager.QueryPageSize : Grid.Pager.PageSize;

            _shouldRender = true;
        }
        protected override void OnParametersSet()
        {
            //determine current column filter settings
            _filterSettings = new List <ColumnFilterValue>();
            if (FilterSettings.IsInitState(Column) && Column.InitialFilterSettings != ColumnFilterValue.Null)
            {
                _filterSettings.Add(Column.InitialFilterSettings);
            }
            else
            {
                _filterSettings.AddRange(FilterSettings.FilteredColumns.GetByColumn(Column));
            }

            _isColumnFiltered = _filterSettings.Any(r => r.FilterType != GridFilterType.Condition);

            //determine current url:
            var queryBuilder = new CustomQueryStringBuilder(FilterSettings.Query);

            var exceptQueryParameters = new List <string>
            {
                QueryStringFilterSettings.DefaultTypeQueryParameter,
                QueryStringFilterSettings.DefaultClearInitFilterQueryParameter
            };
            string pagerParameterName = GetPagerQueryParameterName(((ICGrid)(Column.ParentGrid)).Pager);

            if (!string.IsNullOrEmpty(pagerParameterName))
            {
                exceptQueryParameters.Add(pagerParameterName);
            }

            _url = queryBuilder.GetQueryStringExcept(exceptQueryParameters);

            _clearInitFilter = FilterSettings.Query.Get(QueryStringFilterSettings.DefaultClearInitFilterQueryParameter);

            if (((GridColumnBase <T>)Column).Hidden)
            {
                _cssStyles = ((GridStyledColumn)Column).GetCssStylesString() + " " + ThStyle;
            }
            else
            {
                _cssStyles = ((GridStyledColumn)Column).GetCssStylesString();
            }
            _cssClass = ((GridStyledColumn)Column).GetCssClassesString() + " " + ThClass;

            if (!string.IsNullOrWhiteSpace(Column.Width))
            {
                _cssStyles = string.Concat(_cssStyles, " width:", Column.Width, ";").Trim();
            }

            List <string> cssFilterClasses = new List <string>();

            cssFilterClasses.Add(FilterButtonCss);
            if (_isColumnFiltered)
            {
                cssFilterClasses.Add(FilteredButtonCssClass);
            }
            _cssFilterClass = string.Join(" ", cssFilterClasses);

            List <string> cssSortingClass = new List <string>();

            cssSortingClass.Add("grid-header-title");

            if (Column.IsSorted)
            {
                cssSortingClass.Add("sorted");
                cssSortingClass.Add(Column.Direction == GridSortDirection.Ascending ? "sorted-asc" : "sorted-desc");
            }
            _cssSortingClass = string.Join(" ", cssSortingClass);

            FilterWidgetRender = CreateFilterWidgetComponent();
        }
        protected override void OnParametersSet()
        {
            //determine current column filter settings
            _filterSettings = new List <ColumnFilterValue>();
            if (FilterSettings.IsInitState(Column) && Column.InitialFilterSettings != ColumnFilterValue.Null)
            {
                _filterSettings.Add(Column.InitialFilterSettings);
            }
            else
            {
                _filterSettings.AddRange(FilterSettings.FilteredColumns.GetByColumn(Column));
            }

            _isColumnFiltered = _filterSettings.Any(r => r.FilterType != GridFilterType.Condition);

            //determine current url:
            var queryBuilder = new CustomQueryStringBuilder(FilterSettings.Query);

            var exceptQueryParameters = new List <string>
            {
                QueryStringFilterSettings.DefaultTypeQueryParameter,
                QueryStringFilterSettings.DefaultClearInitFilterQueryParameter
            };
            string pagerParameterName = GetPagerQueryParameterName(((ICGrid)(Column.ParentGrid)).Pager);

            if (!string.IsNullOrEmpty(pagerParameterName))
            {
                exceptQueryParameters.Add(pagerParameterName);
            }

            _url = queryBuilder.GetQueryStringExcept(exceptQueryParameters);

            _clearInitFilter = FilterSettings.Query.Get(QueryStringFilterSettings.DefaultClearInitFilterQueryParameter);

            if (Column.Hidden)
            {
                _cssStyles = ((GridStyledColumn)Column).GetCssStylesString() + " " + ThStyle;
            }
            else
            {
                _cssStyles = ((GridStyledColumn)Column).GetCssStylesString();
            }
            _cssClass = ((GridStyledColumn)Column).GetCssClassesString() + " " + ThClass;

            if (GridComponent.Grid.Direction == GridDirection.RTL)
            {
                _cssStyles = string.Concat(_cssStyles, " text-align:right;direction:rtl;").Trim();
            }

            // tables with fixed layout don't need to set up column width on the header
            if (GridComponent.Grid.TableLayout == TableLayout.Auto)
            {
                if (!string.IsNullOrWhiteSpace(Column.Width))
                {
                    _cssStyles = string.Concat(_cssStyles, " width:", Column.Width, ";").Trim();
                }
            }

            List <string> cssFilterClasses = new List <string>();

            cssFilterClasses.Add(FilterButtonCss);
            if (_isColumnFiltered)
            {
                cssFilterClasses.Add(FilteredButtonCssClass);
            }
            _cssFilterClass = string.Join(" ", cssFilterClasses);

            List <string> cssSortingClass = new List <string>();

            cssSortingClass.Add("grid-header-title");

            if (Column.IsSorted)
            {
                cssSortingClass.Add("sorted");
                cssSortingClass.Add(Column.Direction == GridSortDirection.Ascending ? "sorted-asc" : "sorted-desc");
            }
            _cssSortingClass = string.Join(" ", cssSortingClass);

            if (Column.FilterEnabled)
            {
                FilterWidgetRender = CreateFilterWidgetComponent();
            }

            if (!string.IsNullOrWhiteSpace(Column.Name))
            {
                if (GridComponent.HeaderComponents.ContainsKey(Column.Name))
                {
                    var headerComponent = GridComponent.HeaderComponents.Get(Column.Name);
                    _allChecked     = headerComponent._allChecked;
                    _showAllChecked = headerComponent._showAllChecked;
                }
                GridComponent.HeaderComponents.AddParameter(Column.Name, this);
            }

            _shouldRender = true;
        }