我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>
Run Code Online (Sandbox Code Playgroud)
单击标题时行正确排序,但是当我使用FireBug检查标题时,它只显示:(这是按升序排序时)
<th scope="col">
<a href="javascript:__doPostBack('ctl00$body$ctl00$grdProducts','Sort$Namekey')">Namekey</a>
</th>
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
jim*_*415 14
如果您没有使用GridView数据源,我不确定SortedDescendingHeaderStyle是否在没有代码的情况下工作asp:SQLDataSource.但是一点编码可以帮助你.
您需要手动将CSS样式应用于标题单元格.您可以在排序事件中执行此操作.
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;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我没有足够的代表对接受的答案发表评论.当我尝试应用解决方案时,它会正确排序,但不会将CSS类应用于最终呈现的内容.
在我的例子中,在对我的DataSource(List)进行排序并将其指定为网格的DataSource之后,在我的网格上调用DataBind(),但是在设置CssClass之前就行了.想我会分享,以防其他人遇到类似的事情.
| 归档时间: |
|
| 查看次数: |
10608 次 |
| 最近记录: |