0

我从互联网上获得了以下代码。它工作正常。我也添加了分页。当我只是排序时,它工作正常。当我更改页面索引时,排序会丢失。

这是客户端代码,它使用与服务器端代码中的“GridView1_Sorting”方法链接的排序来设置每页 20 个项目的网格视图。

客户端

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

现在服务器端代码:

服务器端

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();
    }
}
4

3 回答 3

1

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

您应该做的是获取您在 GridView1_Sorting 事件处理程序中编写的代码,并将其包含在 GridData 例程中,以便每当网格填充数据时 - 无论是第一次加载页面时,还是页面索引时更改或对 gridview 进行排序时 - gridview 基于已排序的数据视图,而不是未排序的数据表。

于 2012-10-05T09:52:50.400 回答
1

您使用 GetSortDirection 维护 SortDirection 的方式,以同样的方式维护 SortExpression。

快乐编码!!!

于 2012-10-05T10:42:07.747 回答
0

看看这篇文章,愿你得到你想要的

于 2012-10-05T09:58:41.080 回答