我是用AspNetPager+Gridview分页,它每次返回的是10条,现在根据条件查询,查询出30条:3页。现在我再点Gridview的标题——用来排序。但是排序只是对当前的页排序,另外2页都没有参与。
请问如何解决这个问题啊??有会的没?谢谢。

解决方案 »

  1.   

    用AspNetPager+Gridview分页,如果你设置每页10条,那么你从数据库返回来的就10条数据, 用点排序,只是客户端排序, 另外20条说白了,还在数据库里,并没有正真读出来.你点击下一页,他也只查出下一页的10条. 明白了没?
      

  2.   

    对!那么有没有办法解决这个问题呢,点击Gridview的排序,都排出来,而又不影响分页的功能.
      

  3.   

      在GRIDVIEW点击排序里做模板列,然后通过获取本页面十条数据排序就可以了
      

  4.   

    如果全都读出来,好几万条数据,效率很慢的,那样和GridView自身的排序没有什么区别了,
    现在问题就是怎么在不影响这个AspNetPager分页的情况下,实现根据条件查询出来的数据的排序。
      

  5.   

    你想按你的意思做的话   从数据库查出来的时候加一个排序的条件试试看 girdview 没用过 感觉分页要想功能实现的多的话 就得自己写分页的 不是用他的数据库控件 
      

  6.   

    你用aspnetpager是不好实现的,直接显示30条,数据不会太慢.我这都是50条的也不见得慢.
      

  7.   

    最好在数据库中通过SQL-T语句来实现分页,这样须要多少条记录就读取几条记录.
      

  8.   

    AspNetPager是我写的,我很了解,楼主的问题和AspNetPager根本没有什么直接关系。要实现排序其实很简单:在你获取当前页数据的时候,同时把排序条件传到sql中,根据这个order by条件获取排序后的当前页数据即可。
      

  9.   

    LZ是意思是不是: 数据库里有几十万数据, 然后,根据条件查询出来的30条数据, 在aspnetpager里显示了3页. 点击GW上的标题排序, 后面未显示的2页也跟着一起排序是吧.  那你就做模板,"标题"排序条件加入到服务端做,就是加到aspnetpager查询条件后.
      

  10.   

    谢谢你啊老师,我给你留言了,你没有回,所以我就在论坛上发帖了。你说的:把排序条件传到sql中,根据这个order by条件获取排序后的当前页数据即可。    public static DataSet GetCurrentPage(string sqlStr, int pageIndex, int pageSize,string outtable,SqlParameter[] cmdParms)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                { 
                    SqlCommand cmd = new SqlCommand();
                    PrepareCommand(cmd, connection, null, sqlStr, cmdParms);
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        
                        DataSet dataset = new DataSet();
                        //设置导入的起始地址
                        try
                        {
                            int firstPage = pageIndex * pageSize;                   
                            da.Fill(dataset, firstPage, pageSize, outtable);
                            cmd.Parameters.Clear();                
                        } 
                        catch (System.Data.SqlClient.SqlException ex)
                        {
                            throw new Exception(ex.Message);
                        }
                        return dataset;
                    }
                }
            }这是我原来的方法,现在根据你的建议,再加个方法,方法里再加个排序的条件。可是:
      da.Fill(dataset, firstPage, pageSize, outtable);
       return dataset;
    这里的dataset怎么和那个排好序的DataSet建立联系呢?
      

  11.   


    是你做的吗?  唉,伤心的一踏糊涂,我公司好好的一个小伙子在做项目时,就是因为这个控件不支持distinct而伤心不再写程序.
      

  12.   

    指定order by 应该是没有问题的,每页的数据是查询出来的
      

  13.   

    你查询的时候  难道不和数据库打交道? 和数据库传指令进去的时候 orderby 一下 按照你要的排序条件 直接返回给你排序好的数据啊   这已经说的很清楚了~
      

  14.   

    我原来是用DataView来排序的——就是在前台,我现在用SQL试试。
      

  15.   

    不是咱帮linq 做广告 linq 其实满好用的还用ado.net啊
      

  16.   

    排序?
    1,排序的条件你可以默认写在存储过程里。
    “按姓名排序”、“按创建时间”
    如果是默认的排序是“按姓名排序”,你在界面上又想看到“按创建时间排序”的结果的话,就必须。。
    2,还有一种
    (string wherestr, string orderStr, int kai, int jie)
      

  17.   

    杨老师,我现在离成功就差一步了,推一把:
    /// <summary>
            /// 获得数据列表(查询条件)————————分页控件
            /// </summary>
            public DataSet GetListToPage(string strV_CompName, int pageIndex, int pageSize, string sortExpression, string direction)
            {
                StringBuilder strSql = new StringBuilder();            strSql.Append("select * ");
                strSql.Append(" FROM tbl_Company ");
                strSql.Append(" where I_OperTpye=1");            if (strV_CompName != "")
                {
                    strSql.Append(" and V_Name like @V_Name");
                }
                if (sortExpression != "")
                {
                    strSql.Append(" order by @sortExpression");
                }
                if (direction != "")
                {
                    strSql.Append(" @direction");
                }
                SqlParameter[] parameters = {
                        new SqlParameter("@V_Name", SqlDbType.VarChar),
           new SqlParameter("@sortExpression", SqlDbType.VarChar),
                       new SqlParameter("@direction", SqlDbType.VarChar),
    };
                parameters[0].Value = "%" + strV_CompName + "%";
                parameters[1].Value =  sortExpression;
                parameters[2].Value = direction;
                return DBUtility.DbHelperSQL.GetCurrentPage(strSql.ToString(),pageIndex,pageSize,"onetable",parameters);
            }我在order by 后面传参数怎么不好用,老是报错。GridView的排序事件:
     protected void GVInfo_Sorting(object sender, GridViewSortEventArgs e)
        {
            ViewState["orderName"] = e.SortExpression;
            if (GridViewSortDirection == SortDirection.Ascending)                      //设置排序方向
            {
                GridViewSortDirection = SortDirection.Descending;
                ViewState["orderId"] = " DESC";        }
            else
            {
                GridViewSortDirection = SortDirection.Ascending;
                ViewState["orderId"] = " ASC";
            }
            GVBind(ViewState["orderName"].ToString(), ViewState["orderId"].ToString());    }
      

  18.   

    没有人知道order by 后面的SqlParameter参数为什么赋值的时候就报错吗?结贴了啊。