当前位置:编程学习 > C#/ASP.NET >>

asp.net website 调用 Js进行分页 数据补齐的问题 请帮助解决!

设置每每页显示40条数据

比如现在有41条数据  那么第二页 应该只显示一条

可以 系统 在第二页 会拉取第一页的2-》40数据过来 和 第41条数据  组成 40条数据

显示的

 我想实现的是第一页 40条 第二页就1条

不要自动补齐

function test() {
    var tj = "";
    for (var i = 0; i < $("#sel_tj option").length; i++) {
        var value = $("#sel_tj").get(0).options[i].text;
        tj += value + "$";
    }
    var table = $("#sel_tab").val();
    initPage(tj, table);
    initTable(tj, table, 1, 40);
}

function initTable(tj, table, pageNumber, pageSize) {
    $("#table").datagrid({
        url: 'Handler.ashx?action=getdata&tj=' + tj + '&table=' + table + '&pagenumber=' + pageNumber + '&pagesize=' + pageSize,
        fitColumns: true,
        columns: columns,
        rownumbers: true,
        toolbar: [{
            text: 'Export to Excel',
            iconCls: 'icon-redo',
            handler: function () {
                ExprotToExcel(table, tj);
            }
        }]
    });
}
function initPage(tj, table) {
    $.ajax({
        url: 'Handler.ashx?action=gettotal&tj=' + tj + '&table=' + table,
        type: 'get',
        success: function (total) {
            $('#pp').pagination({
                total: total,
                pageSize: 40,
                showPageList: false,
                onSelectPage: function (pageNumber, pageSize) {
                    initTable(tj, table, pageNumber, pageSize);
                }
            });
        },
        error: function (msg) {
        }
    });
}
function ExprotToExcel(table, tj) {
    $("#div_pro").window("open");
    $.ajax({
        url: 'Handler.ashx?action=exportdata&tj=' + tj + '&table=' + table,
        type: 'get',
        success: function (msg) {
            if (msg.indexOf("false:") == -1) {
                window.open(msg);
            } else {
                alert(msg.substr(msg.indexOf("false:") + 1));
            }
            $("#div_pro").window("close");
        },
        error: function (msg) {
            alert(msg.responseText);
            $("#div_pro").window("close");
        }
    }); --------------------编程问答-------------------- 大神们 帮我看看代码 --------------------编程问答-------------------- 代码懒得看
总之:有41条数据,你第一页显示了40条,那第二页应该只有1条。
--------------------编程问答-------------------- 事实是 第二页也是40条啊 --------------------编程问答-------------------- 那是你分页代码的事情了. 目测你是用top的方式来计算的..

ALTER PROC [dbo].[Pr_PageView]
@tbname      varchar(200),          --要分页显示的表名
@FieldKey    varchar(200),          --用于定位记录的主键(惟一键)字段,单个字段快,多个字段慢
@PrValue     varchar(100)='', --主键值,用于计算出页码,耗时加倍,如果是复合主键要他们的值之和
@PageCurrent int=1 OUTPUT,          --要显示的页码
@PageSize    int=10,               --每页的大小(记录数)
@FieldShow   nvarchar(1000)='',     --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrder  nvarchar(1000)='',    --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC   用于指定排序顺序
@Where       nvarchar(1000)='',     --查询条件
@PageCount   int OUTPUT             --总条数
AS
DECLARE @sql nvarchar(max)

SET NOCOUNT ON
--检查对象是否有效
IF OBJECT_ID(@tbname) IS NULL
BEGIN
RAISERROR(N'对象"%s"不存在',1,16,@tbname)
RETURN
END
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
RETURN
END

--分页字段检查
IF ISNULL(@FieldKey,N'')=''
BEGIN
RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
RETURN
END
--为了方便使用复合主键查询与定位,转换成: upper(col1)+upper(col2)
declare @FieldKeyFormula varchar(200)
set @FieldKeyFormula='upper('+Replace(@FieldKey,',',')+upper(')+')'

--其他参数检查及规范
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
IF ISNULL(@FieldOrder,N'')=N''
SET @FieldOrder=N'order by '+ @FieldKey --设置默认的排序方式
ELSE
SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
IF ISNULL(@Where,N'')=N''
SET @Where=N''
ELSE
SET @Where=N'WHERE ('+@Where+N')'

--PrValue为有效主键值,重新设置页码
IF ISNULL(@PrValue,'')<>'' 
begin
set @PrValue=upper(@PrValue);
set @sql = N'with rnTable as '+
 N'('+
 N'select ' + @FieldKeyFormula + ' primaryKeyId,row_number() '+
 N'  over('+ @FieldOrder +') rn from '+@tbname+ ' '+@Where+
 N') '+
 N'select @PageCurrent=rn from rnTable where primaryKeyId='''+@PrValue+'''';

  exec sp_executesql @sql,N'@PageCurrent int output',@PageCurrent output
SET @PageCurrent=(@PageCurrent+@PageSize-1)/@PageSize
end



--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
IF @PageCount IS NULL
BEGIN
SET @sql=N'SELECT @PageCount=COUNT(1)'
+N' FROM '+@tbname
+N' '+@Where
EXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUT
--SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
END


--计算分页显示的TOPN值
DECLARE @TopN varchar(20),@TopN1 varchar(20)
SELECT @TopN=@PageSize,
@TopN1=@PageCurrent*@PageSize

--第一页直接显示
IF @PageCurrent=1
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder)
ELSE
BEGIN
declare @TopN2 int
set @TopN2=0
--单个主键的,判断是否是单个主键
If Charindex(',',@FieldKey,1)=0
begin
SELECT @TopN2=@TopN1,
@sql=N'SELECT @n=@n-1,@s=CASE WHEN @n<'+@TopN
+N' THEN @s+N'',''+QUOTENAME(RTRIM(CAST('+@FieldKey
+N' as varchar(max))),N'''''''') ELSE N'''' END FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder
SET ROWCOUNT @TopN2
EXEC sp_executesql @sql,
N'@n int,@s nvarchar(max) OUTPUT',
@TopN2,@sql OUTPUT
SET ROWCOUNT 0
IF @sql=N''
EXEC(N'SELECT TOP 0'
+N' '+@FieldShow
+N' FROM '+@tbname)
ELSE
BEGIN
SET @sql=STUFF(@sql,1,1,N'')
--执行查询
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' WHERE '+@FieldKey
+N' IN('+@sql
+N') '+@FieldOrder)
END
end
else--复合主键,数量大时慢,数据量小时快
begin
set @sql=N'with rnTable as '+
 N'('+
 N'select '+@FieldKey+N',row_number() over('+@FieldOrder +
             N') rn from '+@tbName+N' '+@Where+N' '+
 N') '+
 N'select '+@FieldShow+N' from '+@tbName+N' where '+@FieldKeyFormula+N' in '+
 N'(select '+@FieldKeyFormula+N' from rnTable where rn>='+cast((@TopN1-@PageSize+1) as varchar(50))+' and rn<='+cast(@TopN1 as varchar(50))+N')'+
 N' '+@FieldOrder
exec (@sql)
print @sql
end
END


test:
declare @i int
set @i = 1
exec Pr_PageView 'plan_xt_td_projectNode','Id','39',@i out,10,'','','',null
print @i
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,