ASP.NET GridView
排序:我想在单击列名时将排序方向从升序更改为降序。但默认情况下,排序方向始终显示升序。我错过任何属性设置来切换排序方向吗?任何帮助非常感谢。感谢。
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = myDataTable(strSQL);
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = e.SortExpression + " " + SortDirection(e.SortDirection);
gridView.DataSource = dataView;
gridView.DataBind();
}
}
//e.SortDirection always showing ascending
用于排序的aspx gridview列设计:
<asp:BoundField DataField="CREATE_DATE" HeaderText="Create Date" SortExpression="CREATE_DATE" />
答案 0 :(得分:3)
您是否尝试在标记中将GridView
的{{3}}属性设置为true?
<asp:GridView ID="GridView1" runat="server" AllowSorting="True">
<Columns>
...
</Columns>
</asp:GridView>
或者,您可以在DataBind之后的代码中执行此操作:
GridView1.AllowSorting = true;
此属性允许用户单击列标题以对该列进行排序。
编辑: 您实际上必须创建逻辑来决定是升级还是降序 (e.SortDirection
只会帮助您如果您使用“数据源控件”,如SQLDataSource
)。然后你可以将dataView.Sort代码改为这样的代码:
if(someCondition)
dataView.Sort = e.SortExpression + " DESC";
else
dataView.Sort = e.SortExpression + " ASC";
其中someCondition
是您决定排序方式的逻辑(例如,您可以跟踪该列的最后排序方向,如果用户再次单击它,则执行相反的操作)。
答案 1 :(得分:1)
在绑定数据之前,请按照您想要的方向对其进行排序,然后执行以下操作:
gridview.DataSource=data;
gridview.DataBind();
如果您的数据源是SQLDataSource
或类似的,请确保您的select语句按照您最初的方式进行排序。