首页 > 解决方案 > 单击asp链接按钮后保持gridview排序

问题描述

我尝试了多种解决方案来使其正常工作,但我找不到适合我的解决方案。我是使用 ASP.net 进行 C# 编程的初学者,如果能得到任何帮助,我将不胜感激。

目前,如果我单击列标题,我的 gridview 允许我进行排序,这将按升序到降序对其进行排序。但是,当我单击链接按钮时,即我的程序的“标志”列中的按钮之一,它确实突出显示了该选项(它应该这样做),但它没有保持排序 - 我想要它点击后保持排序。请问有人可以帮忙吗?

这是我的 aspx 代码(在 asp:GridView 中):

<%--Flags column--%>                    
                <asp:TemplateField HeaderText ="Flags" ItemStyle-Width="34px" SortExpression="sortFlag">
                <ItemTemplate>
                    <div style="width:34px">
                        <asp:HiddenField ID="HidSortFlag" Value='<%#Eval("sortFlag") %>' runat="server" />
                        <asp:HiddenField ID="hidAmended" Value='<%#Eval("Amended") %>' runat="server" />
                        <asp:HiddenField ID="hidPayAnyway" Value='<%#Eval("PaymentOverrideFlag") %>' runat="server" />
                        <asp:HiddenField ID="hidQueries" Value='<%#Eval("QueryCount") %>' runat="server" />
                        <asp:HiddenField ID="hidSupplierRefCount" Value='<%#Eval("SupplierRefCount") %>' runat="server" />
                        <asp:HiddenField ID="hdnElementRef" Value='<%# Eval("SuggestedMatches") %>' runat="server" />
                        <asp:LinkButton ID="flagQueries" runat="server" Text="<span class='glyphicon glyphicon-comment' data-toggle='tooltip' data-placement='top' title='Comments and Queries'></span>" OnClick="flagQueries_Click" CommandArgument='<%# Eval("StatementLineId") +";"+Eval("SupplierRef") +";" + Eval("SuggestedMatches")%>' > </asp:LinkButton><br />
                        <asp:LinkButton ID="flagAmends" runat="server" Text="<span class='glyphicon glyphicon-flag' data-toggle='tooltip' data-placement='top' title='Related Booking Has Been Amended' ></span>"  OnClick="flagAmends_Click" CommandArgument='<%# Eval("StatementLineId")  %>'></asp:LinkButton><br />
                        <asp:LinkButton id="flagPayments" runat="server" Text="<span class='glyphicon glyphicon-ok' data-toggle='tooltip' data-placement='top' title='Pay Anyway'></span>" OnClick="flagPayments_Click" CommandArgument='<%# Eval("StatementLineId") + ";" +Eval("SuggestedMatches")%>'></asp:LinkButton> <br />

                    </div>                         
                </ItemTemplate>
                </asp:TemplateField>  

这是进行排序的代码:

        protected void gridSummary_Sorting(object sender, GridViewSortEventArgs e)
    {
        //Check if the sort field is being used or a new sort
        if (ViewState["summarySortField"] == null)
        {
            ViewState["summarySortField"] = e.SortExpression;
        }
        else if (ViewState["summarySortField"].ToString() != e.SortExpression)
        {
            ViewState["summaryDirectionState"] = null;
            ViewState["summarySortField"] = e.SortExpression;
        }

        summaryDirection = summaryDirection == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending;
        string sortingDirection = summaryDirection == SortDirection.Ascending ? "Desc" : "Asc";

        DataView summaryView = LoadStatement();

        summaryView.Sort = string.Format("{0} {1}", e.SortExpression, sortingDirection);
        //Session["SortedView"] = summaryView;
        gridSummary.DataSource = summaryView;
        gridSummary.DataBind();
        //ColourFlags();
    }
    public SortDirection summaryDirection
    {
        get
        {
            if (ViewState["summaryDirectionState"] == null)
            {
                ViewState["summaryDirectionState"] = SortDirection.Ascending;
            }
            return (SortDirection)ViewState["summaryDirectionState"];
        }
        set
        {
            ViewState["summaryDirectionState"] = value;
        }
    }

    protected void gridDetail_Sorting(object sender, GridViewSortEventArgs e)
    {
        //Check if the sort field is being used or a new sort
        if (ViewState["detailSortField"] == null)
        {
            ViewState["detailSortField"] = e.SortExpression;
        }
        else if (ViewState["detailSortField"].ToString() != e.SortExpression)
        {
            ViewState["detailDirectionState"] = null;
            ViewState["detailSortField"] = e.SortExpression;
        }

        detailDirection = detailDirection == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending;
        string sortingDirection = detailDirection == SortDirection.Ascending ? "Desc" : "Asc";

        //string gets toggle error field in order to add the colour red to certain columns
        DataView detailView = LoadDetails(Session["arg"].ToString());
        string[] args = Session["arg"].ToString().Split(';');
        string status = args[0];

        detailView.Sort = string.Format("{0} {1}", e.SortExpression, sortingDirection);
        //Session["SortedView"] = summaryView;
        gridDetail.DataSource = detailView;
        gridDetail.DataBind();
        ColourFlags();
        ToggleErrorFields(string.IsNullOrEmpty(status));
    }

    public SortDirection detailDirection
    {
        get
        {
            if (ViewState["detailDirectionState"] == null)
            {
                ViewState["detailDirectionState"] = SortDirection.Ascending;
            }
            return (SortDirection)ViewState["detailDirectionState"];
        }
        set
        {
            ViewState["detailDirectionState"] = value;
        }
    }

这是其中一个标志的点击事件:

       protected void flagAmends_Click(object sender, EventArgs e)
    {
        LinkButton faBtn = sender as LinkButton;
        int lineId = int.Parse(faBtn.CommandArgument);

        using (SpamEntities spam = new SpamEntities())
        {
            SPM_Statement_Lines line = spam.SPM_Statement_Lines.Where(x => x.StatementLineID == lineId).FirstOrDefault();

            line.Amended = !line.Amended;
            spam.SaveChanges();
        }

        //reloads gridview
        LoadDetails(hidStatus.Value + ";" + hidCategory.Value + ";" + lineId);            
    }

单击按钮后,按钮会更改颜色并执行必要的操作,但它并没有保持其排序 - 我一直在尝试解决这个问题,但我没有成功。我将不胜感激任何明确的分步解决方案。

标签: c#asp.netsortinggridview

解决方案


推荐阅读