【问题标题】:Sorting not working with pagination in grid view in asp.net在 asp.net 的网格视图中排序不适用于分页
【发布时间】:2014-03-24 17:31:01
【问题描述】:

你好朋友我的分页工作正常,但是当对任何列进行排序时,它会在第一页排序,但在下一页排序会丢失。

请任何人帮助我解决这个问题。

我的 .aspx 标记代码

                <asp:TemplateField HeaderText="Actions" ItemStyle-Width="20%">
                    <ItemTemplate>
                        <a href='#' onclick="javascript:view_data(<%#Eval("Substance_ID")%>)"><span class="glyphicon glyphicon-eye-open"></span>View</a>
                        &nbsp;
                     <a href='edit.aspx?id=<%#Eval("Substance_ID")%>'><span class="glyphicon glyphicon-pencil"></span>Edit</a>
                        &nbsp;
                     <a href='delete.aspx?id=<%#Eval("Substance_ID")%>'><span class="glyphicon glyphicon-trash"></span>Delete</a>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:BoundField DataField="Substance_ID" HeaderText="Substance ID" SortExpression="Substance_ID" />

                 <asp:TemplateField HeaderText="CAS Number" ItemStyle-Width="10%" SortExpression="CAS_Number">
                    <ItemTemplate>
                        <%# Eval("CAS_Number").ToString().Trim()%>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="EC Number" ItemStyle-Width="10%" SortExpression="EC_Number">
                    <ItemTemplate>
                        <%# Eval("EC_Number").ToString().Trim()%>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Substance Name" SortExpression="Substance_Name">
                    <ItemTemplate>
                        <%#Eval("Substance_Name").ToString().Trim()%>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Primary SG ID" ItemStyle-Width="10%" SortExpression="Primary_SG_ID">
                    <ItemTemplate>
                        <%#Eval("Primary_SG_ID")%>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Status" ItemStyle-Width="5%" SortExpression="Status">
                    <ItemTemplate>
                        <%#Eval("Status")%>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <PagerStyle CssClass="my_pagination" />
            <PagerSettings Mode="NumericFirstLast" FirstPageText="First" LastPageText="Last" PageButtonCount="10" />
            <EmptyDataTemplate>No Data</EmptyDataTemplate>

        </asp:GridView>
        <asp:Label runat="server" ID="lblCount"></asp:Label>

还有我的代码:

    protected void Page_Load(object sender, EventArgs e)
    {
         if(!IsPostBack)
         {
             BindGridViewData();
         }
    }
    private void BindGridViewData()
    {
        List<Substance_Display> Substance_List = new List<Substance_Display>();
        Substance_List = Substance_MasterAccessLayer.GetAllSubstances("Substance_ID");
        Substance_Master.DataSource = Substance_List;
        Substance_Master.DataBind();
        lblCount.Text = "Total " + Substance_List.Count().ToString() + " Records found.";
    }
    protected void Substance_Master_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        Substance_Master.PageIndex = e.NewPageIndex;
        Substance_Master.DataBind();
    }
    private void SortGridView(GridView Substance_Master, GridViewSortEventArgs e, out SortDirection sortDirection, out string sortField)
    {
        sortField = e.SortExpression;
        sortDirection = e.SortDirection;
        if (Substance_Master.Attributes["CurrentSortField"] != null & Substance_Master.Attributes["CurrentSortDirection"] != null)
        {
            if (sortField == Substance_Master.Attributes["CurrentSortField"])
            {
                if (Substance_Master.Attributes["CurrentSortDirection"] == "ASC")
                {
                    sortDirection = SortDirection.Descending;
                }
                else
                {
                    sortDirection = SortDirection.Ascending;
                }

            }
            Substance_Master.Attributes["CurrentSortField"] = sortField;
            Substance_Master.Attributes["CurrentSortDirection"] = (sortDirection == SortDirection.Ascending ? "ASC" : "DESC");
        }
    }
    protected void Substance_Master_Sorting(object sender, GridViewSortEventArgs e)
    {
        SortDirection sortDirection = SortDirection.Ascending;
        string sortField = string.Empty;
        SortGridView(Substance_Master, e, out sortDirection, out sortField);
        string strSortDirection = sortDirection == SortDirection.Ascending ? "ASC" : "DESC";
        Substance_Master.DataSource = Substance_MasterAccessLayer.GetAllSubstances(e.SortExpression + " " + strSortDirection);
        Substance_Master.DataBind();
    }

【问题讨论】:

    标签: c# asp.net sorting gridview paging


    【解决方案1】:

    编辑:我会建议以下解决问题:

    将您的 Page_Load 方法更改为:

     protected void Page_Load(object sender, EventArgs e)
     {
         if(!IsPostBack)
         {
              Substance_Master.Attributes["CurrentSortField"] = "Substance_ID";
              Substance_Master.Attributes["CurrentSortDirection"] = "ASC";
              BindGridViewData();
         }
     }
    

    并将Substance_Master_PageIndexChanging 方法更改为:

    protected void Substance_Master_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        Substance_Master.PageIndex = e.NewPageIndex;
        var sortField = Substance_Master.Attributes["CurrentSortField"];
        var sortDirection = Substance_Master.Attributes["CurrentSortDirection"];
    
        if (sortField != null && sortDirection != null)
        {
            Substance_Master.DataSource = Substance_MasterAccessLayer.GetAllSubstances(sortField + "" + sortDirection);
        }
    
        Substance_Master.DataBind();
    }
    

    说明:在PageIndexChanging事件方法中数据绑定前需要设置GridView的数据源。您可能需要根据当前的排序条件对数据源进行排序。

    【讨论】:

    • 我也尝试过使用它,但它仍然无法正常工作,同样的问题仍然存在,任何其他线索
    • 非常感谢您的解决方案,问题已解决。
    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多