这项目是以前开发的,我进来修改代码时发现,他们所有页面都用一个用户控件,用户控件里有个gridview,并且绑定数据时,不是用代码绑定,而是用ObjectDataSource控件绑定,蛋疼的事情来了,他们在gridview里做了点击列头排序的功能,但是点击列头排序只能对当前页排序(这是gridview默认的),现在要多所有数据进行排序,我看了半天代码,没看明白到底要怎么改,我贴出部分代码出来吧。
1. 用户控件(ascx文件)里gridview排序代码如下: protected void pvgrid_Sorting(object sender, GridViewSortEventArgs e)
        {
            sortexp = e.SortExpression;
            if (sortexp == DefaultSortExpression && FirstLoad == "0")
            {
                sortdir = ((SortDirection)(((int)e.SortDirection) ^ 1)).ToString();
            }
            else
            {
                sortdir = e.SortDirection.ToString();
                FirstLoad = "1";
            }
            this.GetPage();
        }  private void GetPage()
        {
            BeginEventHandler beh = new BeginEventHandler(BeginAsync);
            EndEventHandler eeh = new EndEventHandler(EndAsync);
            PageAsyncTask pat = new PageAsyncTask(beh, eeh, null, null, true);
            this.Page.RegisterAsyncTask(pat);
            this.Page.ExecuteRegisteredAsyncTasks();
        }
就这几句代码,你要我如何下手改咯,求高手指点,能不能不改动数据库中的存储过程,之间在代码中用linq进行所有数据排序功能?linq没怎么用过,望大虾帮忙啊……

解决方案 »

  1.   

    应该是之前封装封装了的,代码写的是记录当前排序状态,然后下次点击的时候改变。你要改成什么样子的要求要说出来啊,下面是我的排序代码仅供参考。
     //保存当前状态
                string sort = string.Empty;
                //更改状态
                if (chkSortDirection.Checked)
                {
                    sort = "asc";
                    chkSortDirection.Checked = false;
                }
                else
                {
                    sort = "desc";
                    chkSortDirection.Checked = true;
                }
                tbSortExpress.Text = e.SortExpression;
                foreach (DataControlField dcf in this.CustGridView1.Columns)
                {
                    if (dcf.SortExpression == e.SortExpression)
                    {
                        if (sort == "desc")
                         dcf.HeaderStyle.CssClass = "tblSortDESC";
                        else
                          dcf.HeaderStyle.CssClass = "tblSortASC";
                    }
                    else
                    {
                        dcf.HeaderStyle.CssClass = "viewTr";
                    }
                }
                this.BindGrid(); //重新绑定
    实现步骤:页面放置一个隐藏的控件记录当前的排序状态,然后点击排序的时候拼接sql进行排序,仅供参考。
      

  2.   


    你这样不行啊,这样做的话我当然知道,问题是我现在的代码时这样的: <control:GridView ID="pvgrid" runat="server" OnPageIndexChanging="PageIndexChanging"
                    AutoGenerateColumns="False" AllowSorting="True" CssClass="tablestyle" AllowPaging="True"
                    HeaderStyle-Wrap="False" DataSourceID="PageViewSource" OnRowCreated="pvgrid_RowCreated"
                    OnSorting="pvgrid_Sorting" OnRowDataBound="pvgrid_RowDataBound">
                    <AlternatingRowStyle CssClass="altrowstyle" />
                    <EmptyDataRowStyle BackColor="#EDF5FF" Height="300px" VerticalAlign="Middle" HorizontalAlign="Center" />
                    <EmptyDataTemplate>
                        没有找到记录</EmptyDataTemplate>
                    <HeaderStyle CssClass="headerstyle" />
                    <PagerTemplate>
                    </PagerTemplate>
                    <RowStyle CssClass="rowstyle" Wrap="False" />
                </control:GridView><asp:ObjectDataSource ID="PageViewSource" runat="server" EnablePaging="True" TypeName="Fujitsu.IBD.ScannerWarranty.View.Control.PageViews"
                SelectMethod="GetRows" SelectCountMethod="GetCount"></asp:ObjectDataSource>
    我要怎么在这基础上改,他都用了ObjectDataSource来绑定gridvew的数据,郁闷起~~~
      

  3.   

    尼玛,看来csdn都是些水货,妈的,没有几个人会真正回答你的问题,无效结贴,真是操蛋