public IHtmlContent Render(IGridColumn column)
        {
            if (!column.FilterEnabled)
            {
                return(new HtmlString(string.Empty));
            }


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

            if (_settings.IsInitState(column) && 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.Query);

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

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

            string url = builder.GetQueryStringExcept(exceptQueryParameters);

            var clearInitFilter = _settings.Query[QueryStringFilterSettings.DefaultClearInitFilterQueryParameter];

            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 },
                { "data-clearinitfilter", clearInitFilter.ToString() }
            };

            using (var sw = new StringWriter())
            {
                gridFilterButton.WriteTo(sw, HtmlEncoder.Default);
                gridFilter.InnerHtml.SetHtmlContent(sw.ToString());
            }

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

            using (var sw = new StringWriter())
            {
                gridFilter.WriteTo(sw, HtmlEncoder.Default);
                return(new HtmlString(sw.ToString()));
            }
        }