SortedAscendingHeaderStyle-CssClass覆盖列HeaderStyle CssClass

时间:2019-05-27 10:26:00

标签: c# asp.net gridview webforms columnsorting

对GridView排序时,SortedAscendingHeaderStyle-CssClass属性完全覆盖TemplateField或BoundFiled HeaderStyle-CssClass属性,而不是在尾部附加值。 我知道仅在使用SqlDataSource到页面时才应用排序样式。实际上,样式已正确应用,但列类已完全删除。

我尝试使用我的自定义方法,该方法用于非SqlDataSource数据源。此方法动态地将columnedAscendingHeaderStyle-CssClass和SortedDescendingHeaderStyle-CssClass应用于列CSS的尾部,而无需删除其他类。

这是我构建的扩展方法

public static void ApplySortCss(this DataControlFieldCollection colums, string sortExpression, SortDirection direction, GridView gv)
        {
            string ascendingCssClass = gv.SortedAscendingHeaderStyle.CssClass;
            string descendingCssClass = gv.SortedDescendingHeaderStyle.CssClass;

            foreach(DataControlField c in colums)
            {
                c.HeaderStyle.CssClass = c.HeaderStyle.CssClass.Replace(ascendingCssClass, string.Empty).Trim();
                c.HeaderStyle.CssClass = c.HeaderStyle.CssClass.Replace(descendingCssClass, string.Empty).Trim();

                if(c.SortExpression == sortExpression)
                    c.HeaderStyle.CssClass += $" {(direction == SortDirection.Ascending ? ascendingCssClass : descendingCssClass)}";
            }
        }

此代码正确执行,但是在呈现页面时,以前的类始终被覆盖。 我曾尝试在GridView Sorted,Sorting,DataBound事件以及PagePrerender事件中使用此方法,但没有任何更改。

页面生活事件中还有其他事件,可以尝试调用我的方法吗?还是有更好的解决方案?

0 个答案:

没有答案