我用的是vs2005,采用了sqldatasource数据源控件,如果把sqldatasource的mode设置成dataset很简单,没有问题。
但是因为数据量比较大,我不想在服务器缓存大量数据,想一次读取一页的数据,翻页的时候再重新取数据。在sqldatasource中不知道该如何实现?我有个例子是ObjectDataSource实现数据源分页的例子,通过ObjectDataSource的SelectCountMethod编程实现,但是sqldatasource没有这个啊!

解决方案 »

  1.   

    把分页写在SQL语句里,通过传参实现分页就可以了吧
      

  2.   

    自己手写个分页不就行了
    你不要用ScriptManager1
    你用后台代码用 Gridview1.DataSource = "返回的数据";
    Gridview1.DataBind();
      

  3.   


    SQL里怎么写呢?能否给出个简单例子?
      

  4.   


    CREATE PROCEDURE dbo.GetPageRecord 
        ( 
        @tblName      varchar(255),       -- 表名 
        @fldlist varchar(1000)='*', 
        @fldName      varchar(255),       --排序字段 
        @KeyField     varchar(255),        --主键 
        @PageSize     int = 10,           -- 页尺寸 
        @PageIndex    int = 1,            -- 页码 
        @IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回 
        @OrderType    bit = 1,            -- 设置排序类型, 非 0 值则降序 
        @strWhere     varchar(4000) = ''  -- 查询条件 (注意: 不要加 where) 
        ) 
    AS 
    SET NOCOUNT ON 
    DECLARE @PageLowerBound int 
    DECLARE @PageUpperBound int 
     
    -- Set the page bounds 
    SET @PageLowerBound = @PageSize * @PageIndex 
    SET @PageUpperBound = @PageLowerBound + @PageSize + 1 
     
    -- Create a temp table to store the select results 
    create table #temp 

         RecNo int IDENTITY (1, 1) NOT NULL, 
         oldid int 

    --generate record 
    Declare @Sqlstr varchar(6000) 
    set @sqlstr='select '+@Keyfield+' from '+@tblname 
    if(@strWhere<>'') 
    begin 
        set @Sqlstr=@sqlstr+' where ('+@strWhere+')' 
    end 
    set @sqlstr=@sqlstr+' order by '+@fldName 
    if(@ordertype=0) 
    begin 
        set @sqlstr=@sqlstr+' asc' 
    end 
    else 
    begin 
        set @sqlstr=@sqlstr+' desc' 
    end 
    set @sqlstr='insert into #temp (oldid) '+@sqlstr 
    execute(@sqlstr) 
    set @sqlstr='SELECT '+@fldList+' FROM '+@tblname+' TableA (nolock), #temp T WHERE T.oldid = TableA.'+@keyfield+' AND T.RecNo > '+ cast(@PageLowerBound as varchar)+' AND  T.RecNo < '+cast(@PageUpperBound as varchar)+' ORDER BY T.RecNo' 
    execute(@sqlstr) 
    GO