我试图让gridview手动排序和分页,但没有成功.

问题是,当用户单击他们想要排序的列时,它会对该页面进行排序,但不会对网格视图后面的数据源(数据视图)进行排序.因此,当他们前进到不同的页面时,他们的排序就会丢失.我很可能正在寻找一种对网格视图后面的数据源进行实际排序的类型.以下是我目前掌握的情况:

protected void GridView_OnSort(object sender, GridViewSortEventArgs e)
    {
        String sortExpression = e.SortExpression;

        if (GridViewSortDirection == SortDirection.Ascending)
        {
            DataView myDataView = new DataView(mybll.GetItemsOrdered());
            myDataView.Sort = sortExpression + " DESC";
            GridView.DataSource = myDataView;
            GridView.DataBind();
        }
        else
        {
            DataView myDataView = new DataView(mybll.GetItemsOrdered());
            myDataView.Sort = sortExpression + " ASC";
            GridView.DataSource = myDataView;
            GridView.DataBind();
        }
    }

任何帮助都将不胜感激.谢谢

推荐答案

在视图状态中保存排序顺序.

private const string ASCENDING = " ASC";
private const string DESCENDING = " DESC";

public SortDirection GridViewSortDirection
{
    get
    {
        if (ViewState["sortDirection"] == null)
            ViewState["sortDirection"] = SortDirection.Ascending;

        return (SortDirection) ViewState["sortDirection"];                
    }
    set { ViewState["sortDirection"] = value; } 
}

protected void GridView_Sorting(object sender, GridViewSortEventArgs e)
{
    string sortExpression = e.SortExpression;

    if (GridViewSortDirection == SortDirection.Ascending)
    {
        GridViewSortDirection = SortDirection.Descending;
        SortGridView(sortExpression, DESCENDING);
    }
    else
    {
        GridViewSortDirection = SortDirection.Ascending;
        SortGridView(sortExpression, ASCENDING); 
    }   

}

private void SortGridView(string sortExpression,string direction)
{
    //  You can cache the DataTable for improving performance
    DataTable dt = GetData().Tables[0]; 

    DataView dv = new DataView(dt); 
    dv.Sort = sortExpression + direction;         

    GridView1.DataSource = dv;
    GridView1.DataBind();         
}

为什么不想使用现有的排序功能?你可以随时定制它.

MSDN为Sorting Data in a GridView Web Server Control

以下是自定义的示例:

http://www.netomatix.com/development/GridViewSorting.aspx

Asp.net相关问答推荐

Razor 页面客户端站点验证不起作用

带有模型的 mvc 上传文件 - 第二个参数发布的文件为空

从 Request.Url.AbsolutePath 获取应用相对 url

在 ASP.NET 中访问没有值的查询字符串参数

EntityFramework 通过 ID 获取对象?

如果站点在 localhost 或 127.0.0.1 上运行,如何判断 ASP.NET MVC 视图

将命令行参数传递给 ASP.NET Core 中的 Startup 类

由于缺少定义,在 .net Core 应用程序上构建失败

在 asp.net 中调整图像大小而不会丢失图像质量

如何使用 app_GlobalResource 或 app_LocalResource?

oAuth ASP.NET 成员资格提供程序

如何获得 System.Diagnostics.Process 的输出?

如何删除asp.net中的特定会话?

您正在使用哪些身份验证和授权方案 - 为什么?

SQLServer 与 StateServer 的 ASP.NET 会话状态性能

OWIN 和 Katana,为什么要将应用程序与服务器解耦?

ASP .NET 单例

在.net的内存数据库中

System.Web.Caching 还是 System.Runtime.Caching 更适合 .NET 4 Web 应用程序

try 为 Medium Trust 开发是否会失败?