.Net 分页实现系列之二基于sql语句分页的方式
2006-01-13 11:38
417 查看
Sql语句。很多情况下都是基于Select Top {0} * From T_O_Log Where Id Not in ( Select Top {1} Id From T_O_Log Order By ID Desc ) Order By ID Desc
其基本原理是获取总数M条记录,而通过m条记录获取所需分页的n条最前的记录。
例如 分页中每页为10条记录,现在要跳转到10页去。那么总要获取的纪录为100条,而我们所需要的其实是最后的10条记录而已。所以前面的90条记录抛弃。
为了实现的方便,该例子是用aspnetpager做为显示页码和分页转向,当然你也可以自己写上一页、下一页的转向工作
实现方法如下
第一步,从工具箱—〉Web窗体—〉拖拉出DataGrid控件(或者是DataList 等等)
<asp:DataGrid id="DataGrid1" runat="server" Width="100%" AutoGenerateColumns="False" singleValue="#F7F7F7" oldValue="#FFFFFF">
</ asp:DataGrid>
第二步 双击该窗体,进入codebehide
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
GetLog();
}
}
private void GetLog()
{
string strsql;
//统计总的记录数
SqlConnection Conn = new SqlConnection();
Conn.ConnectionString =@"server=MIS\PMSERVER;uid=sa;pwd=sa;database=test";
Conn.Open();
strsql=" Select count(ID) From T_O_Log";
DataSet ds = new DataSet();
SqlDataAdapter Adp = new SqlDataAdapter(strSql,Conn);
Adp.Fill(ds,"TypeIdList"); this.AspNetPager1.RecordCount=System.Convert.ToInt32(ds.Tables[0].Rows[0][0]) ;
BindData();
}
private void BindData()
{
string strsql;
int RecordPage=(AspNetPager1.CurrentPageIndex-1)*AspNetPager1.PageSize;
SqlConnection Conn = new SqlConnection();
Conn.ConnectionString =@"server=MIS\PMSERVER;uid=sa;pwd=sa;database=test";
Conn.Open();
strsql=String.Format(" Select Top {0} * From T_O_Log Where Id Not in ( Select Top {1} Id From T_O_Log Order By ID Desc) Order By ID Desc" ,AspNetPager1.PageSize.ToString(),RecordPage.ToString());
DataSet ds = new DataSet();
SqlDataAdapter Adp = new SqlDataAdapter(strSql,Conn);
Adp.Fill(ds,"TypeIdList");
this.DataGrid1.DataSource=ds.Tables["T_O_Log"];
this.DataGrid1.DataBind();
//动态设置用户自定义文本内容
adp.Dispose();
AspNetPager1.CustomInfoText="记录总数:<font color=\"blue\"><b>"+AspNetPager1.RecordCount.ToString()+"</b></font>";
AspNetPager1.CustomInfoText+=" 总页数:<font color=\"blue\"><b>"+AspNetPager1.PageCount.ToString()+"</b></font>";
AspNetPager1.CustomInfoText+=" 当前页:<font color=\"red\"><b>"+AspNetPager1.CurrentPageIndex.ToString()+"</b></font>";
}
private void AspNetPager1_PageChanged(object src, Wuqi.Webdiyer.PageChangedEventArgs e)
{ AspNetPager1.CurrentPageIndex=e.NewPageIndex;
BindData();
System.Text.StringBuilder sb=new StringBuilder("<script Language=\"Javascript\"><!--\n");
sb.Append("var el=document.all;");
sb.Append(this.DataGrid1.ClientID);
sb.Append(".scrollIntoView(true);");
sb.Append("<");
sb.Append("/");
sb.Append("script>");
if(!Page.IsStartupScriptRegistered("scrollScript"))
Page.RegisterStartupScript("scrollScript",sb.ToString());
}
其基本原理是获取总数M条记录,而通过m条记录获取所需分页的n条最前的记录。
例如 分页中每页为10条记录,现在要跳转到10页去。那么总要获取的纪录为100条,而我们所需要的其实是最后的10条记录而已。所以前面的90条记录抛弃。
为了实现的方便,该例子是用aspnetpager做为显示页码和分页转向,当然你也可以自己写上一页、下一页的转向工作
实现方法如下
第一步,从工具箱—〉Web窗体—〉拖拉出DataGrid控件(或者是DataList 等等)
<asp:DataGrid id="DataGrid1" runat="server" Width="100%" AutoGenerateColumns="False" singleValue="#F7F7F7" oldValue="#FFFFFF">
</ asp:DataGrid>
第二步 双击该窗体,进入codebehide
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
GetLog();
}
}
private void GetLog()
{
string strsql;
//统计总的记录数
SqlConnection Conn = new SqlConnection();
Conn.ConnectionString =@"server=MIS\PMSERVER;uid=sa;pwd=sa;database=test";
Conn.Open();
strsql=" Select count(ID) From T_O_Log";
DataSet ds = new DataSet();
SqlDataAdapter Adp = new SqlDataAdapter(strSql,Conn);
Adp.Fill(ds,"TypeIdList"); this.AspNetPager1.RecordCount=System.Convert.ToInt32(ds.Tables[0].Rows[0][0]) ;
BindData();
}
private void BindData()
{
string strsql;
int RecordPage=(AspNetPager1.CurrentPageIndex-1)*AspNetPager1.PageSize;
SqlConnection Conn = new SqlConnection();
Conn.ConnectionString =@"server=MIS\PMSERVER;uid=sa;pwd=sa;database=test";
Conn.Open();
strsql=String.Format(" Select Top {0} * From T_O_Log Where Id Not in ( Select Top {1} Id From T_O_Log Order By ID Desc) Order By ID Desc" ,AspNetPager1.PageSize.ToString(),RecordPage.ToString());
DataSet ds = new DataSet();
SqlDataAdapter Adp = new SqlDataAdapter(strSql,Conn);
Adp.Fill(ds,"TypeIdList");
this.DataGrid1.DataSource=ds.Tables["T_O_Log"];
this.DataGrid1.DataBind();
//动态设置用户自定义文本内容
adp.Dispose();
AspNetPager1.CustomInfoText="记录总数:<font color=\"blue\"><b>"+AspNetPager1.RecordCount.ToString()+"</b></font>";
AspNetPager1.CustomInfoText+=" 总页数:<font color=\"blue\"><b>"+AspNetPager1.PageCount.ToString()+"</b></font>";
AspNetPager1.CustomInfoText+=" 当前页:<font color=\"red\"><b>"+AspNetPager1.CurrentPageIndex.ToString()+"</b></font>";
}
private void AspNetPager1_PageChanged(object src, Wuqi.Webdiyer.PageChangedEventArgs e)
{ AspNetPager1.CurrentPageIndex=e.NewPageIndex;
BindData();
System.Text.StringBuilder sb=new StringBuilder("<script Language=\"Javascript\"><!--\n");
sb.Append("var el=document.all;");
sb.Append(this.DataGrid1.ClientID);
sb.Append(".scrollIntoView(true);");
sb.Append("<");
sb.Append("/");
sb.Append("script>");
if(!Page.IsStartupScriptRegistered("scrollScript"))
Page.RegisterStartupScript("scrollScript",sb.ToString());
}
相关文章推荐
- 【转】Net 分页实现系列之二基于sql语句分页的方式
- .Net 分页实现系列之三---基于有查询条件的分页的方式 (1-13 11:38)
- sql语句实现分页
- SQL大语句——实现分页,select top后面跟变量出错
- sql语句分页多种方式
- SQL 2005实现单表分页的查询语句
- sqlServer 中使用sql语句实现固定分页功能
- 实现用SQL语句分页查询操作hibernate
- 基于.NET平台的分层架构实战(七)—数据访问层的第一种实现:Access+SQL
- 玩转Web之Jsp(三)-----Jsp+SQLServer 用sql语句实现分页
- sql语句分页多种方式ROW_NUMBER()OVER
- 基于.NET平台的分层架构实战(七)——数据访问层的第一种实现:Access+SQL
- MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- 在SQL Server中通过SQL语句实现分页查询(转)
- 3大数据库(Sql-Server,MySql和Oracle)的分页SQL语句实现
- 在SQL Server中通过SQL语句实现分页查询
- sql语句转化为分页查询的一种实现
- 一个利用sql 语句来实现分页的存储过程
- Android学习(十) SQLite 基于SQL语句的操作方式