首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GridView在分页后丢失排序?

GridView在分页后丢失排序?
EN

Stack Overflow用户
提问于 2012-10-05 17:44:34
回答 3查看 6K关注 0票数 0

我从网上得到了下面的代码。它工作正常。我还添加了分页功能。当我只是在排序时,它工作正常。当我更改页面索引时,排序丢失。

下面是客户端代码,它使用服务器端代码中链接到"GridView1_Sorting“方法的排序,设置了一个每页20个项目的网格视图。

客户端

代码语言:javascript
复制
<asp:GridView ID="GridView1" runat="server" DataKeyNames="eno" AutoGenerateColumns="False" PageSize="20" AllowPaging="True" AllowSorting="True" OnSorting="GridView1_Sorting" CellPadding="4">
    <Columns>
        <asp:TemplateField HeaderText="Employee no" SortExpression="eno">
            <ItemTemplate>
                <%#Eval("eno")%>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Emp name" SortExpression="empname">
            <ItemTemplate>
                <%#Eval("empname")%>
            </ItemTemplate> 
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Salary" SortExpression="sal">
            <ItemTemplate>
                <%#Eval("sal")%>
            </ItemTemplate> 
        </asp:TemplateField>
    </Columns>
</asp:GridView>

服务器端

代码语言:javascript
复制
using System.Data.SqlClient;
using System.Configuration;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["Con"].ConnectionString);
    SqlCommand sqlcmd;
    SqlDataAdapter da;
    DataTable dt = new DataTable();
    DataTable dt1 = new DataTable();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            GridData();
        }
    }

    void GridData()
    {
        sqlcmd = new SqlCommand("select * from emp", sqlcon);
        sqlcon.Open();
        da = new SqlDataAdapter(sqlcmd);
        dt.Clear();
        da.Fill(dt);

        if (dt.Rows.Count > 0)
        {
            Session["dt"] = dt;
            GridView1.DataSource = dt;
            GridView1.DataBind();
        } 
    } 

    private string GVSortDirection
    {
        get { return ViewState["SortDirection"] as string ?? "DESC"; }
        set { ViewState["SortDirection"] = value; }
    }

    private string GetSortDirection()
    {
        switch (GVSortDirection)
        { 
            case "ASC":
                GVSortDirection = "DESC";
                break;

            //assign new direction as ascending order
            case "DESC":
                GVSortDirection = "ASC";
                break;
        }

        return GVSortDirection;
    }

    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dataTable = (DataTable)Session["dt"];
        if (dataTable != null)
        { 
            DataView dataView = new DataView(dataTable); 
            string sortDirection = GetSortDirection(); 
            dataView.Sort = e.SortExpression + " " + sortDirection; 
            GridView1.DataSource = dataView;
            GridView1.DataBind();
        }
    } 

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        GridData();
    }
}
EN

Stack Overflow用户

回答已采纳

发布于 2012-10-05 17:52:50

当您分页时,将调用PageIndexChanging事件。这反过来会运行GridData()过程,该过程将网格视图的数据源设置为一个数据表,其中包含来自emp表的记录,没有特定的排序顺序。

您应该做的是将您在GridView1_Sorting事件处理程序中编写的代码包含在GridData例程中,以便每当网格中填充数据时-无论是页面首次加载时、页面索引更改时还是网格视图排序时-网格视图都基于排序的数据视图,而不是未排序的数据表。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12743653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档