AspNet_webformaspx页面_实现分页

来源:互联网 发布:linux ansi 控制码 编辑:程序博客网 时间:2024/05/22 17:18

List.aspx:

<body>
    <form id="form1" runat="server">
    <div>
        <table>
            <tr>
                <th>编号</th><th>希望标题</th><th>新闻发布时间</th><th>操作</th>
            </tr>
<%=this.TrBody %>
        </table>
       <div class="paginator">
           <%--此div放我们所有的分页的超级链接--%>
         <%--  <% for (int i = 1; i <= PageCount; i++)
              { %>
           <a href="MainList.aspx?pageIndex=
<%=i %>"><%= i %></a>
           <% } %>--%>

           <hr/>
           <%= NavPageLink %>
       </div>
    </div>
    </form>
</body>



list.aspx.cs:

public partial class MainList : System.Web.UI.Page
    {
        public string TrBody { get; set; }


        public int PageCount { get; set; }


        public string NavPageLink { get; set; }


        protected void Page_Load(object sender, EventArgs e)
        {
            //拿到当前请求的页码
            int pageIndex = int.Parse(Request["pageIndex"] ?? "1");
            int pageSize = 5;
            int totalCount = 0;


            //从数据库中获取所有的新闻,然后发送前台进行展示
            BLL.HKSJ_Main mianService =new HKSJ_Main();


            //把所有数据集都查询出来。
            //List<Model.HKSJ_Main> newsList = mianService.GetModelList("");


            //把当前页的数据查询出来。取第二页的数据:6-10条数据。
            
            //调用存储过程:LoadPageMain
            List<Model.HKSJ_Main> newsList= mianService.LoadPageMainByProc(pageSize, pageIndex, out totalCount);


            StringBuilder sb =new StringBuilder();
            foreach (var hksjMain in newsList)
            {
                sb.AppendFormat("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td><a href='EditMain.aspx?id={0}'>修改</a></td></tr>", hksjMain.ID, hksjMain.title,
                                hksjMain.Date);
            }


            TrBody = sb.ToString();


            //页 5条。  总共有7条。 2页。  7/5=1
            PageCount = Math.Max((totalCount + pageSize - 1)/pageSize,1);




            NavPageLink = Common.LaomaPager.ShowPageNavigate(pageSize, pageIndex, totalCount);


        }
    }


HKSJ_MainExt.cs:

public partial class HKSJ_Main
{
public List<Model.HKSJ_Main> LoadPageMainByProc(int pageSize,int pageIndex,out int count)
{
            using (SqlConnection conn = new SqlConnection(DbHelperSQL.connectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.Connection = conn;
                    cmd.CommandText = "LoadPageMain";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add(new SqlParameter("@pageIndex", pageIndex));
                    cmd.Parameters.Add(new SqlParameter("@pageSize", pageSize));
                    SqlParameter outCount = new SqlParameter("@count",SqlDbType.Int);
                    //设置当前为输出参数。
                    outCount.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(outCount);
                    
                    //1、拿到输出参数,一种办法就 是通过  存储过程直接返回一个表,表里面放输出参数的值。
                    //2、使用的SqlDataAdapter也可拿到输出参数。


                    using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
                    {
                        DataSet ds =new DataSet();
                        adapter.Fill(ds);//填充的时候,自动打开连接,填充完了之后,自动关闭链接。
                        //这时候可以拿到输出参数值。
                        count = (int)outCount.Value;


                        List<Model.HKSJ_Main> mainList =new List<Model.HKSJ_Main>();
                        foreach ( DataRow row in ds.Tables[0].Rows)
                        {
                            mainList.Add(this.DataRowToModel(row));
                        }
                        return mainList;
                    }


                    //using (var reader = cmd.ExecuteReader())
                    //{
                    ////如果连接没有断掉的时候,不会拿到输出参数。    
                    //}
                }
            }
}
}



public class LaomaPager
    {
        /// <summary>
        /// 传几个参数过来,帮助我们生产分页的超级链接而已。
        /// </summary>
        /// <param name="pageSize"></param>
        /// <param name="currentPage"></param>
        /// <param name="totalCount"></param>
        /// <returns></returns>
        public static string ShowPageNavigate(int pageSize, int currentPage, int totalCount)
        {
            string redirectTo = "";
            pageSize = pageSize == 0 ? 3 : pageSize;
            var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //总页数
            var output = new StringBuilder();
            if (totalPages > 1)
            {
                if (currentPage != 1)
                {//处理首页连接
                    output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=1&pageSize={1}'>首页</a> ", redirectTo, pageSize);
                }
                if (currentPage > 1)
                {//处理上一页的连接
                    output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>上一页</a> ", redirectTo, currentPage - 1, pageSize);
                }
                else
                {
                    // output.Append("<span class='pageLink'>上一页</span>");
                }


                output.Append(" ");
                int currint = 5;
                for (int i = 0; i <= 10; i++)
                {//一共最多显示10个页码,前面5个,后面5个
                    if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
                    {
                        if (currint == i)
                        {//当前页处理
                            //output.Append(string.Format("[{0}]", currentPage));
                            output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage, pageSize, currentPage);
                        }
                        else
                        {//一般页处理
                            output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage + i - currint, pageSize, currentPage + i - currint);
                        }
                    }
                    output.Append(" ");
                }
                if (currentPage < totalPages)
                {//处理下一页的链接
                    output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>下一页</a> ", redirectTo, currentPage + 1, pageSize);
                }
                else
                {
                    //output.Append("<span class='pageLink'>下一页</span>");
                }
                output.Append(" ");
                if (currentPage != totalPages)
                {
                    output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>末页</a> ", redirectTo, totalPages, pageSize);
                }
                output.Append(" ");
            }
            output.AppendFormat("第{0}页 / 共{1}页", currentPage, totalPages);//这个统计加不加都行
            return output.ToString();
        }
    }


SQLQuerry:

--pageIndex:页码    
--pageSize:一页多少条数据
--要求把当前页的数据查询出来。
create Proc LoadPageMain
@pageIndex int,--4
@pageSize int,--5
@count int out
as
select top(@pageSize) * from HKSJ_Main
where ID not in  --越过第pageIndex-1页
(
select top(@pageSize*(@pageIndex-1)) ID 
from HKSJ_Main 
order by ID
)
order by ID
select @count=count(1) from HKSJ_Main
--set @count=(select count(1) from HKSJ_Main)
select @count
--存储过程可不可以返回多个数据。可不可以返回多个表?




-------------------------------------------
declare @count int
exec LoadPageMain 3,5,@count output
print @count


select *,0 from HKSJ_Main

原创粉丝点击