文档章节

曾今的代码系列——自己的分页控件+存储过程实现分页

 木宛城主
发布于 2015/03/02 19:42
字数 772
阅读 2
收藏 0

项目里面的测试代码,仅供参考

LoginByAjax

<title>Ajax登陆</title>
    <script src="Scripts/common.js" type="text/javascript"></script>
    <script type="text/javascript">
        var xhr;
        window.onload = function () {
            xhr = new createXmlHttp();
            gel("btnLogin").onclick = loginByAjax;
        }
        function loginByAjax() {
            gel("msgImg").src = "Images/load.gif";
            var uName = gel("txtUserName").value;
            var uPwd = gel("txtPwd").value;
            var urlStr = "DoLogin.ashx"
            var data = "uName=" + uName + "&uPwd=" + uPwd;
            xhr.open("POST", urlStr, true);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) {
                    if (xhr.status == 200) {
                        var responseText = xhr.responseText;
                        if (responseText == "1") {
                            alert("登陆成功");
                            window.location = "Default.aspx";
                        }
                        else {
                            alert("登陆失败");
                        }
                    }
                }
            }
            xhr.send(data);

        }
    </script>

登陆成功后Default.aspx

public partial class Default : System.Web.UI.Page
    {
        protected StringBuilder sbTableContent = new StringBuilder();
        protected string PageHtml = string.Empty;
        protected int nextPage = 1;
        protected int nowPage = 1;
        
        BLL.StudentManager studentManager = new BLL.StudentManager();
        protected void Page_Load(object sender, EventArgs e)
        {
            //加载
            //加载之前先判断是否登陆
            if (new WebHelper().IsLogin())
            {
                LoadList();
            }
            else
            {
                Response.Redirect("AjaxLogin.aspx");
            }
       
        }
     
        private void LoadList()
        {
            int initRowCount=0;
            int initPageCount=0;
            MyPage page = new MyPage();
            page.TryParseCurrentPageIndex(Request.QueryString["page"]);

            List<Model.Students> listStudents = studentManager.QueryListByPageIndexPro(page.CurrentPageIndex,page.PageSize , out initRowCount, out initPageCount);
            page.PageCount = initPageCount;
            page.TotalCount = initRowCount;

            page.UrlFormat = "Default.aspx?page={n}";
            PageHtml = page.RenderToHTML();
            int index = (page.CurrentPageIndex - 1) * page.PageSize + 1;
            if (listStudents!=null)
            {
                foreach (Model.Students model in listStudents)
                {
                    sbTableContent.Append("<tr><td>" + index.ToString()+ "</td>");
                    sbTableContent.Append("<td>"+model.SClasses.CName+"</td>");
                    sbTableContent.Append("<td>"+model.SLoginName+"</td>");
                    sbTableContent.Append("<td>"+model.SCnName+"</td>");
                    sbTableContent.Append("<td>"+(model.SGender.Value?"":"")+"</td>");
                    sbTableContent.Append("<td>"+model.STel+"</td>");
                    sbTableContent.Append("<td>"+model.SAddtime.Value.ToShortDateString()+"</td>");
                    sbTableContent.Append("<td><a href='Modify.aspx?id="+model.SID.ToString()+"'>修改</a>&nbsp;<a href='javascript:doDel("+model.SID.ToString()+")'>删除</a>");
                    index++;
                }
            }

        }
    }

自绘分页控件

public class MyPage
    {
        public int TotalCount { get; set; }
        public int PageSize { get; set; }
        public int CurrentPageIndex { get; set; }
        public int MaxPageCount { get; set; }
        public string UrlFormat { get; set; }
        public int PageCount { get; set; }
        public MyPage()
        {
            PageSize = 4;
            MaxPageCount = 10;
        }
        private void Check()
        {
            System.Diagnostics.Debug.Assert(PageSize>0);
            System.Diagnostics.Debug.Assert(CurrentPageIndex>0);
            System.Diagnostics.Debug.Assert(!string.IsNullOrWhiteSpace(UrlFormat));
        }

        public void TryParseCurrentPageIndex(string pn)
        {
            int temp;
            if (int.TryParse(pn,out temp))
            {
                CurrentPageIndex = temp;
            }
            else
            {
                CurrentPageIndex = 1;
            }
        }
        public string RenderToHTML()
        {
            Check();
            StringBuilder sb = new StringBuilder();
            //double tempCount = (TotalCount+(0.0) )/ PageSize;
            //int pageCount = (int)Math.Ceiling(tempCount);
            int visibleStart = CurrentPageIndex - MaxPageCount / 2;
            if (visibleStart<1)//6还是没区别
            {
                visibleStart = 1;
            }
            int visibleEnd = visibleStart + MaxPageCount;
            if (visibleEnd > PageCount)
            {
                visibleEnd = PageCount;
            }
            if (CurrentPageIndex>1)
            {
                sb.Append(GetPageLink(1,"首页"));
                sb.Append(GetPageLink(CurrentPageIndex-1,"上一页"));
            }
            else
            {
                sb.Append("<span>首页</span>");
                sb.Append("<span>上一页</span>");
            }
            for (int i = visibleStart; i <=visibleEnd; i++)
            {
                if (i==CurrentPageIndex)
                {
                    sb.Append("<span>").Append(i).Append("</span>");
                }
                else
                {
                    sb.Append(GetPageLink(i,i.ToString()));
                }
            }
            if (CurrentPageIndex < PageCount)
            {
                sb.Append(GetPageLink(CurrentPageIndex+1,"下一页"));
                sb.Append(GetPageLink(PageCount, "末页"));
            }
            else
            {
                sb.Append("<span>下一页</span>");
                sb.Append("<span>末页</span>");
            }
            return sb.ToString();
        }
        private string GetPageLink(int i,string text)
        {
            StringBuilder sb = new StringBuilder();
            string url = UrlFormat.Replace("{n}",i.ToString());
            sb.Append("<a href='").Append(url).Append("'>").Append(text).Append("</a>")   ;
            return sb.ToString();
        }
    }

 

数据访问层的调用存储过程代码:

public List<Model.Students> QueryListByPageIndexPro(int pageIndex,int pageSize,out int rowCount,out int pageCount)
        {
            Model.Students model = null;
            DataTable dt = dbHelper.ExecProForPageList(pageIndex, pageSize, out rowCount, out pageCount);
            List<Model.Students> list = null;
            if (dt.Rows.Count>0)
            {
                list = new List<Model.Students>();
                foreach (DataRow dr in dt.Rows)
                {
                    model = new Model.Students();
                    SetDr2Model(dr,model);
                    list.Add(model);
                }
            }
            return list;
        }
public DataTable ExecProForPageList(int pageIndex, int pageSize, out int rowCount, out int pageCount)
        {
       
            SqlParameter[] parameters = 
            {
                new SqlParameter("@PageIndex",SqlDbType.Int,4),
                new SqlParameter("@PageSize",SqlDbType.Int,4),
                new SqlParameter("@RowCount",SqlDbType.Int,4),
                new SqlParameter("@PageCount",SqlDbType.Int,4)
            };
            parameters[0].Value = pageIndex;
            parameters[1].Value = pageSize;
            parameters[2].Direction = ParameterDirection.Output;
            parameters[3].Direction = ParameterDirection.Output;
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "GetPageDataOutRowPageCount";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = Connection;
            cmd.Parameters.AddRange(parameters);
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            rowCount = Convert.ToInt32(parameters[2].Value);
            pageCount = Convert.ToInt32(parameters[3].Value);
            return dt;

        }

存储过程代码:

Create PROCEDURE [dbo].[GetPageDataOutRowPageCount]
(
@PageIndex int = 1,--当前页数 
@PageSize  int = 1,--每页大小
@RowCount int output,--总行数(传出参数)
@PageCount int output--总页数(传出参数)
)
AS
begin
    DECLARE @sql NVARCHAR(225),@sqlCount NVARCHAR(225)
    select @RowCount =COUNT(SID),@PageCount=CEILING((COUNT(SID)+0.0)/@PageSize) FROM Students where SIsDel=0
    SET @sql='SELECT TOP '+str(@PageSize) +' * FROM Students,Classes where SCID=CID and SIsDel=0 and SID not in(select top '+str((@PageIndex-1)*@PageSize) +' SID from Students where SIsDel=0)order by SID'
    print @sql
    EXEC(@sql)
end

总结

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 222
码字总数 199010
作品 0
黄浦
ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页

关键字:DataGrid、存储过程、分页 出自:http://blog.csdn.net/yzx110/archive/2004/08/18/78525.aspx 摘要:在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并...

晨曦之光
2012/03/09
48
0
Bootstrap响应式前端框架笔记十一——分页与标签

Bootstrap响应式前端框架笔记十一——分页与标签 在开发搜索结果页、列表页时通常会使用到分页器控件,Bootstrap中提供了方便的类来进行分页器的创建,示例如下: 效果如下: 为li元素添加d...

珲少
2016/12/13
58
0
pdf.js插件使用记录,在线打开pdf

天记录一个js库:pdf.js。主要是实现在线打开pdf功能。因为项目需求需要能在线查看pdf文档,所以就研究了一下这个控件。 有些人很好奇,在线打开pdf文档浏览器不是支持吗。是的你说的都是现代...

yanbigfeg
08/20
0
0
一步步构建“半自动”数据分页模块

一步步构建“半自动”数据分页模块 引言 GridView等数据控件提供的数据分页功能非常方便,甚至不需要编写代码就可以完成分页,但是它有一个缺陷,就是每次都会取出所有数据但仅显示一页数据,...

张子阳
2008/09/27
0
0
PWMIS数据开发框架--PDF.NET

框架支持的功能 UI层(WinForm / Web)控件数据绑定、映射与查询; BLL层实体对象查询(OQL) DAL层SQL语句和.NET数据访问代码映射(查看 SQL-MAP 原理) 详细说来,框架还包含以下特色功能...

独行族妖侠
2013/07/22
6.6K
2

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
1
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
7
3
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
4
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
2
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部