aspnetpager实现高效分页
2010-11-08 22:13
183 查看
今天晚上手痒,写了一下代码。使用aspnetpager这个免费的分页控件。
aspx页面部分代码如下:
Code:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="LearningAspNet.无刷新分页.WebForm1" %>
<%@ Register assembly="AspNetPager" namespace="Wuqi.Webdiyer" tagprefix="webdiyer" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>AspNetPager+存储过程完成分页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server" onitemcommand="Repeater1_ItemCommand"
onitemdatabound="Repeater1_ItemDataBound" >
<HeaderTemplate><!--头模板-->
<table><tr>
<td>学生编号</td>
<td>学生姓名</td>
<td>学生性别</td>
<td align="center">操 作</td>
</tr>
</HeaderTemplate>
<ItemTemplate><!--项模板-->
<tr>
<td><%#Eval("sid") %></td>
<td><%#Eval("sname") %></td>
<td><%#Eval("ssex") %></td>
<td><asp:Button ID="Button1" runat="server" Text="Button" CommandName="btn" CommandArgument='<%#Eval("sid") %>' />
</td></tr>
</ItemTemplate>
<AlternatingItemTemplate ><!-- 交替行-->
<tr style="background-color:Aqua">
<td><%#Eval("sid") %></td>
<td><%#Eval("sname") %></td>
<td><%#Eval("ssex") %></td>
<td>
<asp:Button ID="Button1" runat="server" Text="Button" CommandName="btn" CommandArgument='<%#Eval("sid") %>'/>
</td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate><!--脚模板-->
</table>
</FooterTemplate>
</asp:Repeater>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" OnPageChanged="AspNetPager1_PageChanged">
</webdiyer:AspNetPager>
</form>
</body>
</html>
cs后台部分代码:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace LearningAspNet.无刷新分页
{
public partial class WebForm1 : System.Web.UI.Page
{
string connStr = ConfigurationManager.ConnectionStrings["studentConnectionString"].ToString();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
/// <summary>
/// 绑定数据
/// </summary>
private void bind()
{
this.AspNetPager1.RecordCount = getRecordCount();//总记录数
int curPage = this.AspNetPager1.CurrentPageIndex;//当前页的索引
int count = this.AspNetPager1.PageSize=3;//每页显示条数
Repeater1.DataSource = getData(curPage, count, "stuinfo", "sid");
Repeater1.DataBind();
}
/// <summary>
/// 获取数据源
/// </summary>
/// <param name="curPage">当前页</param>
/// <param name="count">每页显示的条数</param>
/// <param name="tblName">表名</param>
/// <param name="colum">主键(标识)</param>
/// <returns></returns>
private DataSet getData(int curPage,int count,string tblName,string colum) {
SqlConnection conn = new SqlConnection(connStr);
try
{
conn.Open();
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "page";
//给存储过程添加参数
cmd.Parameters.Add(new SqlParameter("@currentPage", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@count", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@tableName", SqlDbType.VarChar));
cmd.Parameters.Add(new SqlParameter("@column", SqlDbType.VarChar));
//给参数赋值
da.SelectCommand.Parameters["@currentPage"].Value = curPage;
da.SelectCommand.Parameters["@count"].Value = count;
da.SelectCommand.Parameters["@tableName"].Value = tblName;
da.SelectCommand.Parameters["@column"].Value = colum;
// da.SelectCommand = cmd;
da.Fill(ds);
return ds;
}
catch (Exception)
{
throw;
}
finally {
conn.Close();
}
}
/// <summary>
/// 查询总记录数
/// </summary>
/// <returns></returns>
private int getRecordCount()
{
int i = 0;
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sql = "select count(*) from stuinfo";//查询处总记录数
SqlDataAdapter da = new SqlDataAdapter(sql,conn);
object obj = da.SelectCommand.ExecuteScalar();//查询结果的第一行第一列 --总记录条数
i = int.Parse(obj.ToString());//总记录条数
conn.Close();
return i;
}
/// <summary>
/// 翻页事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
bind();
}
/// <summary>
/// DataList控件中点击任意一列的按钮会发生
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName=="btn")
{
Label1.Text ="我的学号是"+ e.CommandArgument.ToString();
Label1.Style["color"] = "red";
}
}
/// <summary>
/// 每一项绑定的时候
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType==ListItemType.Item)
{
Button btn = (Button)e.Item.FindControl("Button1");//找到按钮
btn.Text = "汇报";
}else if(e.Item.ItemType==ListItemType.AlternatingItem)
{
Button btn = (Button)e.Item.FindControl("Button1");
btn.Text = "汇报";
}
}
}
}
数据库部分,分页存储过程:
Code:
--存储过程实现灵活的分页
if object_id('page','p') is not null
drop proc page
go
create proc page
@currentPage int=1,--要查询第几页
@count int=10,--每页显示几条
@tableName varchar(20),--表名
@column varchar(20)--列名
as
declare @sql nvarchar(1000)
set @sql = N'select top '+ cast(@count as nvarchar(3))
set @sql=@sql+N' * from '+@tableName+' where '+@column+' not in('
set @sql=@sql+N'select top '+cast(((@currentPage-1)*@count) as nvarchar(3))
set @sql=@sql+@column+N' from '+@tableName+')'
exec(@sql)
go
exec page 1,2,'stuinfo','sid' --测试存储过程
由于时间有限,代码写的很仓促,很凌乱。大家请勿笑话!
aspx页面部分代码如下:
Code:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="LearningAspNet.无刷新分页.WebForm1" %>
<%@ Register assembly="AspNetPager" namespace="Wuqi.Webdiyer" tagprefix="webdiyer" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>AspNetPager+存储过程完成分页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server" onitemcommand="Repeater1_ItemCommand"
onitemdatabound="Repeater1_ItemDataBound" >
<HeaderTemplate><!--头模板-->
<table><tr>
<td>学生编号</td>
<td>学生姓名</td>
<td>学生性别</td>
<td align="center">操 作</td>
</tr>
</HeaderTemplate>
<ItemTemplate><!--项模板-->
<tr>
<td><%#Eval("sid") %></td>
<td><%#Eval("sname") %></td>
<td><%#Eval("ssex") %></td>
<td><asp:Button ID="Button1" runat="server" Text="Button" CommandName="btn" CommandArgument='<%#Eval("sid") %>' />
</td></tr>
</ItemTemplate>
<AlternatingItemTemplate ><!-- 交替行-->
<tr style="background-color:Aqua">
<td><%#Eval("sid") %></td>
<td><%#Eval("sname") %></td>
<td><%#Eval("ssex") %></td>
<td>
<asp:Button ID="Button1" runat="server" Text="Button" CommandName="btn" CommandArgument='<%#Eval("sid") %>'/>
</td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate><!--脚模板-->
</table>
</FooterTemplate>
</asp:Repeater>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" OnPageChanged="AspNetPager1_PageChanged">
</webdiyer:AspNetPager>
</form>
</body>
</html>
cs后台部分代码:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace LearningAspNet.无刷新分页
{
public partial class WebForm1 : System.Web.UI.Page
{
string connStr = ConfigurationManager.ConnectionStrings["studentConnectionString"].ToString();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
}
/// <summary>
/// 绑定数据
/// </summary>
private void bind()
{
this.AspNetPager1.RecordCount = getRecordCount();//总记录数
int curPage = this.AspNetPager1.CurrentPageIndex;//当前页的索引
int count = this.AspNetPager1.PageSize=3;//每页显示条数
Repeater1.DataSource = getData(curPage, count, "stuinfo", "sid");
Repeater1.DataBind();
}
/// <summary>
/// 获取数据源
/// </summary>
/// <param name="curPage">当前页</param>
/// <param name="count">每页显示的条数</param>
/// <param name="tblName">表名</param>
/// <param name="colum">主键(标识)</param>
/// <returns></returns>
private DataSet getData(int curPage,int count,string tblName,string colum) {
SqlConnection conn = new SqlConnection(connStr);
try
{
conn.Open();
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "page";
//给存储过程添加参数
cmd.Parameters.Add(new SqlParameter("@currentPage", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@count", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@tableName", SqlDbType.VarChar));
cmd.Parameters.Add(new SqlParameter("@column", SqlDbType.VarChar));
//给参数赋值
da.SelectCommand.Parameters["@currentPage"].Value = curPage;
da.SelectCommand.Parameters["@count"].Value = count;
da.SelectCommand.Parameters["@tableName"].Value = tblName;
da.SelectCommand.Parameters["@column"].Value = colum;
// da.SelectCommand = cmd;
da.Fill(ds);
return ds;
}
catch (Exception)
{
throw;
}
finally {
conn.Close();
}
}
/// <summary>
/// 查询总记录数
/// </summary>
/// <returns></returns>
private int getRecordCount()
{
int i = 0;
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sql = "select count(*) from stuinfo";//查询处总记录数
SqlDataAdapter da = new SqlDataAdapter(sql,conn);
object obj = da.SelectCommand.ExecuteScalar();//查询结果的第一行第一列 --总记录条数
i = int.Parse(obj.ToString());//总记录条数
conn.Close();
return i;
}
/// <summary>
/// 翻页事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
bind();
}
/// <summary>
/// DataList控件中点击任意一列的按钮会发生
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName=="btn")
{
Label1.Text ="我的学号是"+ e.CommandArgument.ToString();
Label1.Style["color"] = "red";
}
}
/// <summary>
/// 每一项绑定的时候
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType==ListItemType.Item)
{
Button btn = (Button)e.Item.FindControl("Button1");//找到按钮
btn.Text = "汇报";
}else if(e.Item.ItemType==ListItemType.AlternatingItem)
{
Button btn = (Button)e.Item.FindControl("Button1");
btn.Text = "汇报";
}
}
}
}
数据库部分,分页存储过程:
Code:
--存储过程实现灵活的分页
if object_id('page','p') is not null
drop proc page
go
create proc page
@currentPage int=1,--要查询第几页
@count int=10,--每页显示几条
@tableName varchar(20),--表名
@column varchar(20)--列名
as
declare @sql nvarchar(1000)
set @sql = N'select top '+ cast(@count as nvarchar(3))
set @sql=@sql+N' * from '+@tableName+' where '+@column+' not in('
set @sql=@sql+N'select top '+cast(((@currentPage-1)*@count) as nvarchar(3))
set @sql=@sql+@column+N' from '+@tableName+')'
exec(@sql)
go
exec page 1,2,'stuinfo','sid' --测试存储过程
由于时间有限,代码写的很仓促,很凌乱。大家请勿笑话!
相关文章推荐
- 使用AspNetPager让当前分类下的商品实现高效分页显示
- 使用第三方分页AspNetPager实现真正分页的SQL原理
- 用Gridview和AspNetPager控件实现真分页(二)
- 使用AspNetPager高效分页..
- ASP.NET中利用DataGrid实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现大数据的高效分页显示
- 用AspNetPager实现数据的分页
- 利用SQL Server 2005的新特性来简单高效的实现分页
- Jquery+Ajax+Json+存储过程实现高效分页
- 用AspNetPager控件最详细的分页实现方法
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- .NET实现Repeater控件+AspNetPager控件分页
- ASP.NET中DataList控件和AspNetPager控件的组合使用并实现分页
- 如何实现ListView高效分页
- 网页设计:AspNetPager控件+repeater+Ajax+存储过程实现高效分页,还有漂亮控件样式
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 如何实现ListView高效分页代码
- 存储过程 + AspNetPager 实现分页