存储过程:
ALTER
PROCEDURE
[dbo]
.
[sp_product]
@TableList
Varchar
(
200
)=
'*'
,
--
搜索表的字段
,
比如:’
id
,
datatime
,
job
‘,用逗号隔开
@TableName
Varchar
(
30
),
--
搜索的表名
@SelectWhere
Varchar
(
500
)=
''
,
--
搜索条件,这里不用写
where
,比如:
job=
’
teacher
‘
and class='2'
@SelectOrderId
Varchar
(
20
),
--
表主键字段名。比如:
id
@SelectOrder
Varchar
(
200
)=
''
,
--
排序,可以使用多字段排序但主键字段必需在最前面也可以不写,比如:
order by class asc
@intPageNo
int
=
1
,
--
页号
@intPageSize
int
=
10
,
--
每页显示数
@RecordCount
int
OUTPUT
--
总记录数
(
存储过程输出参数
)
as
declare
@TmpSelect
NVarchar
(
600
)
declare
@Tmp
NVarchar
(
600
)
set
nocount
on
--
关闭计数
set
@TmpSelect
=
'select @RecordCount = count(*) from '
+
@TableName
+
' '
+
@SelectWhere
execute
sp_executesql
@TmpSelect
,
--
执行上面的
sql
语句
N
'@RecordCount int OUTPUT'
,
--
执行输出数据的
sql
语句,
output
出总记录数
@RecordCount
OUTPUT
if
(
@RecordCount
=
0
)
--
如果没有贴子,则返回零
return
0
/*
判断页数是否正确
*/
if
(
@intPageNo
-
1
)
*
@intPageSize
>
@RecordCount
--
页号大于总记录数,返回错误
return
(-
1
)
set
nocount
off
--
打开计数
if
@SelectWhere
!=
''
begin
set
@TmpSelect
=
'select top '
+
str
(
@intPageSize
)+
' '
+
@TableList
+
' from '
+
@TableName
+
' where '
+
@SelectOrderId
+
' not in(select top '
+
str
((
@intPageNo
-
1
)*
@intPageSize
)+
' '
+
@SelectOrderId
+
' from '
+
@TableName
+
' '
+
@SelectWhere
+
' '
+
@SelectOrder
+
') and '
+
@SelectWhere
+
' '
+
@SelectOrder
end
else
begin
set
@TmpSelect
=
'select top '
+
str
(
@intPageSize
)+
' '
+
@TableList
+
' from '
+
@TableName
+
' where '
+
@SelectOrderId
+
' not in(select top '
+
str
((
@intPageNo
-
1
)*
@intPageSize
)+
' '
+
@SelectOrderId
+
' from '
+
@TableName
+
' '
+
@SelectOrder
+
') '
+
@SelectOrder
end
execute
sp_executesql
@TmpSelect
return
(
@@rowcount
)
DAO层:
public
DataTable
PageDB(
int
pagesize,
int
pageno,
out
int
RecordCount)
{
DataTable
dt =
new
DataTable
();
string
cmdText =
"sp_product"
;
SqlParameter
[] paras =
new
SqlParameter
[]{
// new SqlParameter("@TableList",SqlDbType.VarChar),
new
SqlParameter
(
"@TableName"
,
SqlDbType
.VarChar ),
new
SqlParameter
(
"@SelectOrderId"
,
SqlDbType
.VarChar ),
new
SqlParameter
(
"@SelectOrder"
,
SqlDbType
.VarChar ),
new
SqlParameter
(
"@intPageNo"
,
SqlDbType
.Int ),
new
SqlParameter
(
"@intPageSize"
,
SqlDbType
.Int ),
new
SqlParameter
(
"@RecordCount"
,
SqlDbType
.Int),
// new SqlParameter("@strwhere",SqlDbType.VarChar )
};
paras[0].Value =
"product"
;
paras[1].Value =
"Pro_id"
;
paras[2].Value =
""
;
paras[3].Value = pageno;
paras[4].Value = pagesize;
paras[5].Direction =
ParameterDirection
.Output;
dt = sqlhelper.ExecuteQuery(cmdText, paras,
CommandType
.StoredProcedure);
RecordCount =
Convert
.ToInt32( paras[5].Value.ToString());
return
dt;
}
BLL:
public
DataTable
PageDB(
int
pagesize,
int
pageno,
out
int
RecordCount)
{
return
conntest.PageDB(pagesize, pageno,
out
RecordCount);
}
.aspx.cs:
protected
void
Page_Load(
object
sender,
EventArgs
e)
//, strwhere
{
this
.bind();
}
protected
void
link_Click(
object
sender,
EventArgs
e)
{
int
page =
Convert
.ToInt32(txtlink.Text);
int
maxpage =
Convert
.ToInt32(lbpage.Text);
if
(1 <= page && page <= maxpage)
{
Response.Redirect(
"ConnTest.aspx?CurrentPage="
+ page +
""
);
}
else
{ Page.ClientScript.RegisterStartupScript(GetType(),
"massage"
,
"<script>alert('
请输入正确的页码!
')</script>"
); }
}
public
void
bind()
{
int
recordcount;
int
pageNo = 1;
int
pageSize = 10;
if
(Request.QueryString[
"CurrentPage"
] ==
null
)
{
pageNo = 1;
}
else
{
pageNo =
Int32
.Parse(Request.QueryString[
"CurrentPage"
]);
}
DataTable
dt =
new
ConnTestManager
().PageDB(pageSize, pageNo,
out
recordcount);
GridView1.DataSource = dt;
GridView1.DataBind();
lbRecord.Text = recordcount.ToString();
lbRow.Text = pageNo.ToString();
int
sumPage = recordcount / pageSize;
if
(recordcount % pageSize > 0)
{
sumPage = sumPage + 1;
}
lbpage.Text = sumPage.ToString();
//
总页数
if
(pageNo > 1)
{
hylfirst.NavigateUrl =
"ConnTest.aspx?CurrentPage=1"
;
hylprev.NavigateUrl =
string
.Concat(
"ConnTest.aspx?CurrentPage="
,
""
, pageNo - 1);
}
else
{
hylprev.NavigateUrl =
""
;
hylfirst.NavigateUrl =
""
;
hylfirst.Enabled =
false
;
hylprev.Enabled =
false
;
}
if
(pageNo < recordcount)
{
hylend.NavigateUrl =
string
.Concat(
"ConnTest.aspx?CurrentPage="
,
""
, recordcount);
hylnext.NavigateUrl =
string
.Concat(
"ConnTest.aspx?CurrentPage="
,
""
, pageNo + 1);
}
else
{
hylnext.NavigateUrl =
""
;
hylend.NavigateUrl =
""
;
hylend.Enabled =
false
;
hylnext.Enabled =
false
;
}
}
.aspx,此处只列一条记录
<
div
>
<
asp
:
GridView
ID
="GridView1"
runat
="server"
AutoGenerateColumns
="false">
<
Columns
>
<
asp
:
TemplateField
HeaderText
="
排序
">
<
ItemTemplate
>
<%
#
Eval(
"ProOrder"
)%>
</
ItemTemplate
>
</
asp
:
TemplateField
>
</
Columns
>
</
asp
:
GridView
>
<
asp
:
HyperLink
ID
="hylfirst"
runat
="server">
首页
</
asp
:
HyperLink
>
<
asp
:
HyperLink
ID
="hylprev"
runat
="server">
上一页
</
asp
:
HyperLink
>
<
asp
:
HyperLink
ID
="hylnext"
runat
="server">
下一页
</
asp
:
HyperLink
>
<
asp
:
HyperLink
ID
="hylend"
runat
="server">
尾页
</
asp
:
HyperLink
>
第
<
asp
:
Label
ID
="lbRow"
runat
="server"
Text
="Label"></
asp
:
Label
>
页,
共
<
asp
:
Label
ID
="lbpage"
runat
="server"
Text
="Label"></
asp
:
Label
>
页,共
<
asp
:
Label
ID
="lbRecord"
runat
="server"
Text
="Label"></
asp
:
Label
>
条记录,转到
<
asp
:
TextBox
ID
="txtlink"
runat
="server"
Width
="29px"></
asp
:
TextBox
>
页
<
asp
:
LinkButton
ID
="link"
runat
="server"
OnClick
="link_Click"
TabIndex
="1">
转到
</
asp
:
LinkButton
>
<
div
>