GridView的排序工作只有一次 [英] GridView Sorting works once only

查看:101
本文介绍了GridView的排序工作只有一次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个网格,它​​是仅按升序排序一次。然后什么也没有发生。请尽快帮助!

I have a grid and it is sorting once only in ascending order. Then nothing happens. Please help ASAP !!

code aspx文件的:

Code of aspx file:

<asp:GridView ID="gdvSignatureLines" runat="server" CssClass="Grid1" AutoGenerateColumns="False"
                        SkinID="PagedGridView" AllowPaging="True" AllowSorting="True" DataKeyNames="Id" 
                        onrowcommand="gdvSignatureLines_RowCommand" 
                        onrowdeleting="gdvSignatureLines_RowDeleting" 
                        onrowediting="gdvSignatureLines_RowEditing" 
                        onsorting="gdvSignatureLines_Sorting" 
                        onpageindexchanging="gdvSignatureLines_PageIndexChanging">
                        <PagerStyle CssClass="gridPager" HorizontalAlign="Right" />
                        <Columns>
                            <ucc:commandfieldcontrol headertext="Actions" showdeletebutton="true" buttontype="Image"
                                deleteimageurl="~/App_Themes/Default/images/delete.png" showeditbutton="true"
                                editimageurl="~/App_Themes/Default/images/edit.png" deleteconfirmationtext="Are you sure you want to delete?">
                                    <ItemStyle HorizontalAlign="Center" Width="60px" />
                             </ucc:commandfieldcontrol>
                            <asp:BoundField DataField="SortOrder" HeaderText="Line" SortExpression="SortOrder" />
                            <asp:TemplateField HeaderText="Type" SortExpression="glTypeId">
                                <ItemTemplate>
                                    <asp:Label ID="lblglTypeId" runat="server" Text='<%# Eval("GeneralLookup.LookupItem") %>'></asp:Label>
                                </ItemTemplate>  
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Label" SortExpression="glLabelId">
                                <ItemTemplate>
                                    <asp:Label ID="lblglLabelId" runat="server" Text='<%# Eval("GeneralLookup1.LookupItem") %>'></asp:Label>
                                </ItemTemplate>  
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Caption" SortExpression="glCaptionId">
                                <ItemTemplate>
                                    <asp:Label ID="lblglCaptionId" runat="server" Text='<%# Eval("GeneralLookup2.LookupItem") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                        <EmptyDataTemplate>
                            <div class="divEmptyListingGrid">
                                --- No Signature Line Exists ---
                            </div>
                        </EmptyDataTemplate>
                    </asp:GridView>

CS文件code:

Code of cs file:

protected void gdvSignatureLines_Sorting(object sender, GridViewSortEventArgs e)
    {
        lblHeading.Text = "Signature Line for " + reportName;
        ReportOptionsBO reportOptionsBO = new ReportOptionsBO();
        List<ReportSignatureLine> listSignature = reportOptionsBO.GetReportSignatureLineByReportId(reportId);
        if (listSignature != null)
        {
            var param = Expression.Parameter(typeof(ReportSignatureLine), e.SortExpression);
            var sortExpression = Expression.Lambda<Func<ReportSignatureLine, object>>
                (Expression.Convert(Expression.Property(param, e.SortExpression), typeof(object)), param);

            if (e.SortDirection == SortDirection.Ascending)
            {
                gdvSignatureLines.DataSource = listSignature.AsQueryable<ReportSignatureLine>().OrderBy(sortExpression).ToList();
            }
            else
            {
                gdvSignatureLines.DataSource = listSignature.AsQueryable<ReportSignatureLine>().OrderByDescending(sortExpression).ToList();
            }
            gdvSignatureLines.DataBind();
        }
    }

请尽快帮助。
谢谢!

Please help as soon as possible. Thanks!

推荐答案

既然你设置在code中的数据源的后面,那么你就必须写一点code,使分拣工作。

Since you're setting the datasource in code behind then you'll have to write a bit of code to make sorting work.

首先,排序事件添加到GridView标记

First, add the Sorting event to the GridView markup

<asp:GridView ID="gdvSignatureLines" runat="server" CssClass="Grid1" AutoGenerateColumns="False" SkinID="PagedGridView" AllowPaging="True" AllowSorting="True" DataKeyNames="Id" 
   onrowcommand="gdvSignatureLines_RowCommand" 
   onrowdeleting="gdvSignatureLines_RowDeleting" 
   onrowediting="gdvSignatureLines_RowEditing"
   OnSorting="gdvSignatureLines_Sorting"
>

在您的code-背后,绑定排序事件。下面code使用LINQ对数据进行排序和重新绑定GridView的。

In your code-behind, bind the sorting event. The following code uses LINQ to sort the data and the rebind the GridView.

using System.Linq.Expressions;

int reportID = 123456;

protected void gdvSignatureLines_Sorting(object sender, GridViewSortEventArgs e)
{
   ReportOptionsBO reportOptionsBO = new ReportOptionsBO();
   List<T> ReportOptionsBOList =  reportOptionsBO.GetReportSignatureLineByReportId(reportId);

   if (ReportOptionsBOList != null)
   {
      var param = Expression.Parameter(typeof(T), e.SortExpression);
      var sortExpression = Expression.Lambda<Func<T, object>>(Expression.Convert(Expression.Property(param, e.SortExpression), typeof(object)), param);

      if (ViewState["SortDirection"] == "DESC")
      {
         ViewState["SortDirection"] = "ASC";
         gdvSignatureLines.DataSource = ReportOptionsBOList.AsQueryable<T>().OrderBy(sortExpression);
      }
      else
      {
         ViewState["SortDirection"] = "DESC";
         gdvSignatureLines.DataSource = ReportOptionsBOList.AsQueryable<T>().OrderByDescending(sortExpression);
      }

      gdvSignatureLines.DataBind();
   }
}

这篇关于GridView的排序工作只有一次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆