我的分页已经写好了。可是点击下一页,并没有实现分页功能啊。?我用的是DataGrid控件,但我没有用内置的分页功能。点击下一页,还提示页面有错误。theForm._EVENTTARGET为空或不是对象请高手指点!!!

解决方案 »

  1.   

    其实跟Web里面的DataGrid分页差不多的,更确切的说要比Web里面更简单一些,这就要看你对分页的原理了不了解了。可以用微软提供的DataGrid控件来解决分页问题,不需要使用第三方控件。
    楼主可以先到我的小论坛去熟悉一下分页的基本概念。(显示帖子页面,查看回复页面)
    www.xproer.com/bbs
    然后我再跟你讲解一下目前最简单的一种分页方法。通常我们为了考虑分页SQL语句的性能,最好使用四个按钮来实现分页。
    首页,上一页,下一页,尾页
    这四个按钮事件内部分页用四条SQL语句来实现从数据库中读取相应的数据。通常我们的数据表中有ID列,这个基本上是用来分页的。如果我们的数据显示形式是从最新的到最旧的显示方式:
    ID显示:
    100
    99
    98
    97
    96
    95
    94
    93
    92
    91
    90
    89
    88
    87
    86
    85
    84
    83毫无疑问,首页是前10条(假设一页显示10条数据)是从100开始到91,这个SQL最简单:select top 10 from Table1 order by ID DESC        (这个这是首页的SQL语句)那么下一页就是ID要比91小的前10条数据,select top 10 from Table1 where ID<@ID order by ID DESC   (这是下一页SQL语句)尾页SQL语句也是超简单select top 10 from Table1 order by ID ASC          (这个是尾页)上一页SQL语句select top 10 from Table1 where ID>@ID order by ID DESC  (上一页SQL语句)好了,基本分页SQL语句搞定了,那么重要的就是如何取到这些ID值,我们可以将数据读取前台,通过JS获取这些相应的ID值,然后传给服务端控件,这样我们就可以轻松的实现分页了。 
      
    基本上这算得上是最简单的分页了同时也是效率最高的,因为还有一些SQL语句,比如
    select top @PageSize * from (select top @DataCount * from AdminTB order by ID ASC)a order by ID DESC;");原理:
    假设有30条数据:
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30现在我们要取中间的10条数据,则SQL语句要这样写
    select top 10 * from (select top 20 * from AdminTB order by ID ASC) order by ID DESC;");
    实际上的效果如下
    (1,2,3,4,5,6,7,8,9,[ 10,11,12,13,14,15,16,17,18,19,20 ]),21,22,23,24,25,26,27,28,29,30select top 20 * from AdminTB order by ID ASC是取得 () 部分数据
    select top 10 * from (select top 20 * from AdminTB order by ID ASC) order by DESC;取得是 [] 部分。这下明白了吧不过遗憾的是这种分页是效率最低的,因为 @DataCount 会随着你的数据增加而增大,所以我们提倡用第一种,也就是我上面讲的。
      

  2.   

    http://hi.baidu.com/kmiaoer/blog/item/69fccafca22bd583b801a07d.html
      

  3.   

    有时候要学会偷懒,并不是什么东西都自己去写就好,现成的,很好用的分页控件
    http://www.webdiyer.com/AspNetPager/default.aspx
      

  4.   

    在大数据量的情况下建议使用存储过程+游标在数据库服务器端实现
    程序中直接调用就好了不要让数据库闲着,web服务器累死平衡负载
      

  5.   

    贴一个效率比较高的分页存储过程CREATE PROCEDURE [dbo].[Paging_Cursor] (
    @Tables varchar(1000),
    @PK varchar(100),
    @Sort varchar(200) = NULL,
    @PageNumber int = 1,
    @PageSize int = 10,
    @Fields varchar(1000) = '*',
    @Filter varchar(1000) = NULL,
    @Group varchar(1000) = NULL)
    AS/*Find the @PK type*/
    DECLARE @PKTable varchar(100)
    DECLARE @PKName varchar(100)
    DECLARE @type varchar(100)
    DECLARE @prec intIF CHARINDEX('.', @PK) > 0
    BEGIN
    SET @PKTable = SUBSTRING(@PK, 0, CHARINDEX('.',@PK))
    SET @PKName = SUBSTRING(@PK, CHARINDEX('.',@PK) + 1, LEN(@PK))
    END
    ELSE
    BEGIN
    SET @PKTable = @Tables
    SET @PKName = @PK
    ENDSELECT @type=t.name, @prec=c.prec
    FROM sysobjects o 
    JOIN syscolumns c on o.id=c.id
    JOIN systypes t on c.xusertype=t.xusertype
    WHERE o.name = @PKTable AND c.name = @PKNameIF CHARINDEX('char', @type) > 0
       SET @type = @type + '(' + CAST(@prec AS varchar) + ')'DECLARE @strPageSize varchar(50)
    DECLARE @strStartRow varchar(50)
    DECLARE @strFilter varchar(1000)
    DECLARE @strGroup varchar(1000)/*Default Sorting*/
    IF @Sort IS NULL OR @Sort = ''
    SET @Sort = @PK/*Default Page Number*/
    IF @PageNumber < 1
    SET @PageNumber = 1/*Set paging variables.*/
    SET @strPageSize = CAST(@PageSize AS varchar(50))
    SET @strStartRow = CAST(((@PageNumber - 1)*@PageSize + 1) AS varchar(50))/*Set filter & group variables.*/
    IF @Filter IS NOT NULL AND @Filter != ''
    SET @strFilter = ' WHERE ' + @Filter + ' '
    ELSE
    SET @strFilter = ''
    IF @Group IS NOT NULL AND @Group != ''
    SET @strGroup = ' GROUP BY ' + @Group + ' '
    ELSE
    SET @strGroup = ''
    EXEC(
    'DECLARE @PageSize int
    SET @PageSize = ' + @strPageSize + 'DECLARE @PK ' + @type + '
    DECLARE @tblPK TABLE (
                PK  ' + @type + ' NOT NULL PRIMARY KEY
                )DECLARE PagingCursor CURSOR DYNAMIC READ_ONLY FOR
    SELECT '  + @PK + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + 'OPEN PagingCursor
    FETCH RELATIVE ' + @strStartRow + ' FROM PagingCursor INTO @PKSET NOCOUNT ONWHILE @PageSize > 0 AND @@FETCH_STATUS = 0
    BEGIN
                INSERT @tblPK (PK)  VALUES (@PK)
                FETCH NEXT FROM PagingCursor INTO @PK
                SET @PageSize = @PageSize - 1
    ENDCLOSE       PagingCursor
    DEALLOCATE  PagingCursorSELECT ' + @Fields + ' FROM ' + @Tables + ' JOIN @tblPK tblPK ON ' + @PK + ' = tblPK.PK ' + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort
    )
      

  6.   

    分页SQL
    select * from  (select row_number() over(order by colName) as RowNumber,* from tableName) as tableName1 where  RowNumber between "firstRow" and  "endRow" 
    试试,传入一页需要显示的行数,开始和结束。
      

  7.   

      Myconn.Open();//打开数据库  
                OleDbDataAdapter sqlAdapter = new OleDbDataAdapter(selectedCmd);//建立数据适配器
                DataSet ds = new DataSet();//实例化数据库
                sqlAdapter.Fill(ds);//填充适配器
                PagedDataSource pageDataSource = new PagedDataSource();
                pageDataSource.DataSource = ds.Tables[0].DefaultView;
                pageDataSource.AllowPaging = true;
                pageDataSource.PageSize = 8;
                //定义变量用来保存当前页索引
                int CurPage;
                //判断是否具有页面跳转的请求
                if (Request.QueryString["Page"] != null)
                    CurPage = Convert.ToInt32(Request.QueryString["Page"]);
                else
                    CurPage =1;
                
                Response.Cookies["PageIndex"].Value= CurPage.ToString();
                Response.Cookies["PageIndex"].Expires = DateTime.Now.AddDays(1);//设置COOKIES的过期时间为一天
                //Session["PageIndex"] = CurPage.ToString();//把当前页的索引放入Session变量里
                //设置当前页的索引
                pageDataSource.CurrentPageIndex = CurPage - 1;
                //显示状态信息
                LabelPage.Text = "当前页:第" + CurPage.ToString() + "页,共" + pageDataSource.PageCount.ToString() + "页";
                lblPageNumber.Text = Convert.ToString(pageDataSource.PageSize);
                lblInfoCount.Text = Convert.ToString(pageDataSource.DataSourceCount);
               
                
                //如果当前页面不是首页
                if (!pageDataSource.IsFirstPage)
                {
                    //定义"上一页"超级链接的URL为:当前执行页面的虚拟路径,并传递下一页面的索引值
                    LinkPrevious.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage - 1);
                    //首页的链接
                    hplinkFristPage.NavigateUrl = "index.aspx";
                }
                //如果当前页面不是最后一页
                if (!pageDataSource.IsLastPage)
                {
                    //定义"下一页"超级链接的URL为:当前执行页面的虚拟路径,并传递下一页面的索引值
                    LinkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1);
                    //尾页的链接 
                    hplinkLastPage.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(pageDataSource.PageCount.ToString());
                }
                //进行数据绑定
                MyDatalist.DataSource = pageDataSource;
                MyDatalist.DataBind();这个是本人之前做的一个投票系统,现在把分页的代码贴出来给你看下。希望对你能有帮助。