【问题标题】:How do I sort a GridView?如何对 GridView 进行排序?
【发布时间】:2011-10-25 11:39:03
【问题描述】:

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" />

【问题讨论】:

  • 我认为是您需要排序的数据,而不是网格本身。

标签: c# asp.net


【解决方案1】:

您是否尝试在标记中将GridViewAllowSorting 属性设置为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 是您决定排序方式的逻辑(例如,您可以跟踪该列的最后一个排序方向,然后在用户再次单击它时执行相反的操作)。

【讨论】:

  • 是的。我在gridview设计中有这个属性。
  • @user994276 您是否尝试过明确设置排序方向(只是为了看看它是否改变)?像这样:dataView.Sort = e.SortExpression + " DESC";
  • 听起来不错。因为我没有使用 SQLDataSource e.SortDirection 总是默认升序。非常感谢。
【解决方案2】:

在绑定数据之前,按照你想要的方向排序,然后做:

gridview.DataSource=data;
gridview.DataBind();

如果您的数据源是 SQLDataSource 或类似的,只需确保您的 select 语句按照您最初想要的方式进行排序。

【讨论】:

  • 这是我对 Gridview 列进行排序的代码(我已经包含了两个文件)
  • • protected void gridView_Sorting(object sender,
猜你喜欢
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 2011-11-11
  • 2015-06-11
  • 1970-01-01
相关资源
最近更新 更多