对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事件中使用此方法,但没有任何更改。
页面生活事件中还有其他事件,可以尝试调用我的方法吗?还是有更好的解决方案?