我的SortedAscendingHeaderStyle和SortedDescendingHeaderStyle根本不起作用
<asp:GridView ID="grdProducts" runat="server" CssClass="grid" AllowPaging="True" AllowSorting="True" PageSize="100" EmptyDataText="No data to show" onrowdatabound="grdProducts_RowDataBound" onrowediting="grdProducts_RowEditing" onsorting="grdProducts_Sorting" AutoGenerateEditButton="True"> <AlternatingRowStyle CssClass="even" /> <SortedAscendingHeaderStyle ForeColor="White" CssClass="sorted" /> <SortedDescendingHeaderStyle CssClass="sorted desc" /> </asp:GridView>
单击标题时行正确排序,但是当我使用FireBug检查标题时,它只显示:(这是按升序排序时)
<th scope="col"> <a href="javascript:__doPostBack('ctl00$body$ctl00$grdProducts','Sort$Namekey')">Namekey</a> </th>
ForeColor和CssClass根本没有设置.
任何人都知道我做错了什么?
编辑:我的C#代码背后
protected void grdProducts_Sorting(object sender,GridViewSortEventArgs e) { if ((string)ViewState["SortColumn"] == e.SortExpression) ViewState["SortDirection"] = ((string)ViewState["SortDirection"] == "") ? " DESC" : ""; else { ViewState["SortColumn"] = e.SortExpression; ViewState["SortDirection"] = ""; } } protected override void OnPreRender(EventArgs e) { BindGrid(); base.OnPreRender(e); } private void BindGrid() { string query = "SELECT ... ORDER BY " + ViewState["SortColumn"] + ViewState["SortDirection"]; DataTable dt = sqlFunctions.Select(query); grdProducts.DataSource = dt; grdProducts.DataBind(); }
解决方法
如果您没有使用asp:sqlDataSource作为GridView数据源,我不确定SortedDescendingHeaderStyle是否在没有代码的情况下工作.但是一点编码可以帮助你.
您需要手动将CSS样式应用于标题单元格.您可以在Sorting事件中执行此操作.
protected void grdProducts_Sorting(object sender,GridViewSortEventArgs e) { if ((string)ViewState["SortColumn"] == e.SortExpression) { ViewState["SortDirection"] = ((string)ViewState["SortDirection"] == "") ? " DESC" : ""; grdProducts.HeaderRow.Cells[GetColumnIndex( e.SortExpression )].CssClass = "AscendingHeaderStyle"; } else { ViewState["SortColumn"] = e.SortExpression; ViewState["SortDirection"] = ""; grdProducts.HeaderRow.Cells[GetColumnIndex( e.SortExpression )].CssClass = "DescendingHeaderStyle"; } BindGrid(); } private int GetColumnIndex( string SortExpression ) { int i = 0; foreach( DataControlField c in gvwCustomers.Columns ) { if( c.SortExpression == SortExpression ) break; i++; } return i; }