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