知识大全 ASP.NET存储过程自定义分页详解
Posted 知
篇首语:好学而不勤问非真好学者。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET存储过程自定义分页详解相关的知识,希望对你有一定的参考价值。
ASP.NET存储过程自定义分页详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
*/ */ 出自 编程中国 */ 作者 hebingbing */ 时间 编程论坛首发 */ 声明 光看我这么晚了还在工作 转载这段文字应该保留吧…… */ 废话 清明节 同学回家的回家 旅游的旅游……我离家远是不可能回家了 旅游吧不感兴趣 觉得还不如看一场电影……呵呵 从小不喜欢旅游观光…… 转入正题 大家都知道中的Gridview datalist等都可以自定义分页 但是当你翻页的时候 数据表中的所有数据都会加载到内存 重新绑定 当然要是数据量小的话 这是可以的 我们也很乐意用 原因简单因为方便 但是要是数据量是 …… 在信息爆炸的这个时代海量数据是经常的时 那么这些控件自带的分页就显得有些…… 解决这个问题办法就是自己动手……不多废话了 看代码 首先我是用存储过程来解决的 要弄懂这个问题 首先要从存储过程下手 代码如下 CREATE proc getdataset @TableList Varchar( )= * 搜索表的字段 比如 id datatime job 用逗号隔开 @TableName Varchar( ) 搜索的表名 @SelectWhere Varchar( )= 搜索条件 这里不用写where 比如 job= teacher and class= @SelectOrderId Varchar( ) 表主键字段名 比如 id @SelectOrder Varchar( )= 排序 可以使用多字段排序但主键字段必需在最前面 也可以不写 比如 order by class asc @intPageNo int= 页号 @intPageSize int= 每页显示数 @RecordCount int OUTPUT 总记录数(存储过程输出参数) as declare @TmpSelect NVarchar( ) declare @Tmp NVarchar( ) 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 = ) 如果没有贴子 则返回零 return /*判断页数是否正确*/ if (@intPageNo ) * @intPageSize > @RecordCount 页号大于总页数 返回错误 return ( ) set nocount off 打开计数 if @SelectWhere != begin set @TmpSelect = select top +str(@intPageSize)+ +@TableList+ from +@TableName+ where +@SelectOrderId+ not in(select top +str((@intPageNo )*@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 )*@intPageSize)+ +@SelectOrderId+ from +@TableName+ +@SelectOrder+ ) +@SelectOrder end execute sp_executesql @TmpSelect return(@@rowcount) GO 其实代码也很简单 学编程的人基本上都是懂数据库的 这个存储过程估计不是问题 其他的代码我都做了解释 有颜色的那段我没有解释 我在这里解释一下 其实也很简单 大家来看 select top +str((@intPageNo )*@intPageSize)+ +@SelectOrderId+ from +@TableName+ +@SelectWhere + +@SelectOrder+ 这段代码的执行结果是什么了 是不是当前页前面的主键的集合啊 现在我们从所有的表中选出主键的值不在这个结果的之内的pagesize个记录不就是当前页的内容了吗? aspx页面就不用再将了吧?我这里将代码写上 <%@ Page Language= C# AutoEventWireup= true CodeFile= aa aspx cs Inherits= _Default %> <!DOCTYPE PUBLIC //W C//DTD XHTML Transitional//EN transitional dtd > < xmlns= > <head runat= server > <title>无标题页</title> </head> <body> <form id= form runat= server > <div> <asp:GridView ID= GridView runat= server AutoGenerateColumns= False Height= px Width= px > <Columns> <asp:BoundField DataField= job_id HeaderText= job_id /> <asp:BoundField DataField= job_desc HeaderText= job_desc /> <asp:BoundField DataField= max_lvl HeaderText= max_lxl /> </Columns> </asp:GridView> </div> <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= px ></asp:TextBox> 页<asp:LinkButton ID= link runat= server OnClick= link_Click TabIndex= >转到</asp:LinkButton> </form> </body> </> cs页面其实也每页什么好讲的 也就是一些常用的代码罢了……我把代码加上 大家看看 要是有疑问的可以回复我再解释 using System; using System Data; using System Configuration; using System Collections; using System Web; using System Web Security; using System Web UI; using System Web UI WebControls; using System Web UI WebControls WebParts; using System Web UI HtmlControls; using System Data SqlClient; public partial class _Default : System Web UI Page protected void Page_Load(object sender EventArgs e) this bind() protected void link_Click(object sender EventArgs e) int page = Convert ToInt (txtlink Text) Response Redirect( aa aspx?CurrentPage= +page+ ) public void bind() int sumPage; int pageNo = ; int pageSize = ; if (Request QueryString[ CurrentPage ] == null) pageNo = ; else pageNo = Int Parse(Request QueryString[ CurrentPage ]) SqlConnection conn = new SqlConnection(ConfigurationManager AppSettings[ ConStr ]) SqlDataAdapter da = new SqlDataAdapter() da SelectCommand = new SqlCommand() da SelectCommand Connection = conn; da SelectCommand CommandText = getdataset ; da SelectCommand CommandType = CommandType StoredProcedure; da SelectCommand Parameters Add( @TableList SqlDbType VarChar ) Value = job_id job_desc max_lvl ; da SelectCommand Parameters Add( @TableName SqlDbType VarChar ) Value = jobs ; //da SelectCommand Parameters Add( @SelectWhere SqlDbType VarChar ) Value = where d= ; da SelectCommand Parameters Add( @SelectOrderId SqlDbType VarChar ) Value = job_id ; da SelectCommand Parameters Add( @SelectOrder SqlDbType VarChar ) Value = order by min_lvl asc ; da SelectCommand Parameters Add( @intPageNo SqlDbType Int) Value = pageNo; da SelectCommand Parameters Add( @intPageSize SqlDbType Int) Value = pageSize; da SelectCommand Parameters Add( @RecordCount SqlDbType Int) Direction = ParameterDirection Output; da SelectCommand Parameters Add( RowCount SqlDbType Int) Direction = ParameterDirection ReturnValue; DataSet ds = new DataSet() da Fill(ds jobs ) GridView DataSource = ds; GridView DataBind() Int RecordCount = (Int )da SelectCommand Parameters[ @RecordCount ] Value; //求出总记录数 该值是output出来的值 Int RowCount = (Int )da SelectCommand Parameters[ RowCount ] Value; //求出当前页中的记录数 在最后一页不等于pagesize lbRecord Text = RecordCount ToString() lbRow Text = pageNo ToString() sumPage = (Int )RecordCount / pageSize; if (RecordCount % pageSize > ) sumPage = sumPage + ; lbpage Text = sumPage ToString() if (pageNo > ) hylfirst NavigateUrl = aa aspx?CurrentPage= ; hylprev NavigateUrl = string Concat( aa aspx?CurrentPage= pageNo ) else hylprev NavigateUrl = ; hylfirst NavigateUrl = ; hylfirst Visible = false; hylprev Visible = false; if (pageNo < sumPage) hylend NavigateUrl = string Concat( aa aspx?CurrentPage= sumPage) hylnext NavigateUrl = string Concat( aa aspx?CurrentPage= pageNo + ) else hylnext NavigateUrl = ; hylend NavigateUrl = ; hylend Visible = false; hylnext Visible = false; 就这样吧 要是大家有疑问 回帖我们再讨论 在研究…… cha138/Article/program/net/201311/12114相关参考
基于ASP.NET的自定义分页显示[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
基于ASP.NET的自定义分页显示[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
基于ASP.NET的自定义分页显示[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Asp.net中DataGrid控件的自定义分页 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 ASP.NET中自定义DataGrid分页设置的实现
ASP.NET中自定义DataGrid分页设置的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
可能大家有用得着的地方发出来一起研究下代码如下 Pagercs 服务器控件源代码 usingSystem; usingSystemWeb; 
ASP.NET利用存储过程实现分页 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先说下思路写
存储过程的定义 CREATEprocedurepro_buyGoods ( @GoodsNamevarchar() @GoodsNumint ) AS declare@countas
ASP.NET自定义错误页面 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASPNET提供三种
ASP.NET自定义错误处理页面的添加 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 自定义错误