分页:T-SQL存储过程和EF存储过程的使用

首先准备好分页的T-SQL语句:

技术分享
 1 create proc usp_activityFenYe
 2 @pageIndex int,
 3 @pageSize int,
 4 @pageCount int output
 5 as
 6 declare @count int
 7 begin
 8 select @count=COUNT(*) from Activity
 9 set @pageCount=CEILING(@count*1.0/@pageSize)
10 select * from(select *,ROW_NUMBER()over(order by activityid) as num from Activity) as t
11 where num between (@pageIndex-1)*@pageSize+1 and @pageIndex*@pageSize
12 order by ActivityID asc
13 end
View Code

ADO.NET操作:

(1)DAL:

 1 public class ActivityDAL
 2     {
 3         public List<Activity> GetList(int pageIndex, int pageSize, out int pageCount)
 4         {
 5             SqlParameter[] pms = new SqlParameter[] { 
 6            new SqlParameter("@pageIndex",pageIndex),
 7            new SqlParameter("@pageSize",pageSize),
 8            new SqlParameter("@pageCount",0)
 9            };
10             pms[2].Direction = ParameterDirection.Output;
11             List<Activity> list = new List<Activity>();
12             DataTable dt = DBHelper.ExecuteTableSP("usp_activityFenYe", pms);
13             if (dt.Rows.Count > 0)
14             {
15                 Activity model = new Activity();
16                 foreach (DataRow row in dt.Rows)
17                 {
18                     model = LoadEntity(row);
19                     list.Add(model);
20                 }
21             }
22             pageCount = Convert.ToInt32(pms[2].Value);
23             return list;
24         }
25 
26         private Activity LoadEntity(DataRow row)
27         {
28             Activity model = new Activity();
29             model.ActivityID = Convert.ToInt32(row["ActivityID"]);
30             model.Name = row["Name"].ToString();
31             return model;
32         }
33     }

 

(2)BLL:

 1 public class ActivityBLL
 2     {
 3         ActivityDAL dal;
 4         public ActivityBLL()
 5         {
 6             dal = new ActivityDAL();
 7         }
 8         public List<Activity> GetList(int pageIndex, int pageSize, out int pageCount)
 9         {
10             return dal.GetList(pageIndex, pageSize, out pageCount);
11         }
12     }

(3)View:

 1 public class ActivityController : Controller
 2     {
 3         ActivityBLL bll;
 4         DBEntities db;//数据上下文
 5         public ActivityController()
 6         {
 7             bll = new ActivityBLL();
 8             db = new DBEntities();
 9         }
10         public ActionResult Index(int? pageIndex)
11         {
12             //1.ADO.NET
13             int pageSize = 5;
14             int pageCount;
15             List<Model.Activity> list = bll.GetList(pageIndex ?? 1, pageSize, out pageCount);
16             if (Request.IsAjaxRequest())
17             {
18                 return Json(list, JsonRequestBehavior.AllowGet);
19             }
20             ViewBag.pageCount = pageCount;//总页数
21 
22             //2.EF存储过程
23             ObjectParameter obj = new ObjectParameter("pageCount", typeof(int));//注意:前面不要写@
24             ObjectResult<usp_activityFenYe_Result> result = db.usp_activityFenYe(pageIndex ?? 1, pageSize, obj);//使用之前记得导入存储过程
25             //ViewBag.pageCount = obj.Value;//EF传出的总页数
26 
27             //3.另外一种基于EF的方法
28             SqlParameter pCount = new SqlParameter("pageCount", -1);//注意:前面不要写@
29             pCount.Direction = System.Data.ParameterDirection.Output;
30             SqlParameter pIndex = new SqlParameter("@pageIndex", 1);
31             SqlParameter pSize = new SqlParameter("pageSize", 5);
32             List<Models.Activity> data = db.Database.SqlQuery<Models.Activity>("exec usp_activityFenYe @pageIndex,@pageSize,@pageCount output", new object[] { pCount,pIndex,pSize}).ToList();
33             return View(list);
34         }
35     }

 

(4)Razor:

 1 @{
 2     Layout = null;
 3 }
 4 @model IEnumerable<Ado.Net.Model.Activity>
 5 <!DOCTYPE html>
 6 <html>
 7 <head>
 8     <meta name="viewport" content="width=device-width" />
 9     <title>Index</title>
10     <link href="~/Content/bootstrap.min.css" rel="stylesheet" />
11     <script src="~/Scripts/jquery-1.8.2.min.js"></script>
12     <script>
13         function show(index) {
14             $.getJSON("@Url.Action("Index")", { pageIndex: index }).success(function (data) {
15                 var text = "";
16                 for (var i = 0; i < data.length; i++) {
17                     text += "<tr><td>" + data[i].ActivityID + "</td><td>" + data[i].Name + "</td><td><a href=‘javascript:;‘ onclick=‘del(" + data[i].ActivityID + ")‘>删除</a></td><td><a href=‘javascript:window.location.href=@Url.Action("Modify")?id=" + data[i].ActivityID + ")‘>修改</a></td></tr>";
18                 }
19                 $("#table").html(text);
20                 $(".pagination li").removeClass("active").eq(index - 1).addClass("active");
21             })
22         };
23         function del(id) {
24             if (confirm("确定删除")) {
25                 $.post("@Url.Action("Del")", { id: id }).success(function (data) {
26                     if (data.status == 200)
27                         show(1);
28                 })
29             }
30         };
31     </script>
32 </head>
33 <body>
34     <div class="container">
35         <table class="table table-striped table-bordered">
36             <thead>
37                 <tr>
38                     <th>活动ID</th>
39                     <th>名称</th>
40                     <th>操作</th>
41                 </tr>
42             </thead>
43             <tbody id="table">
44                 @foreach (var i in Model)
45                 {
46                     <tr>
47                         <td>@i.ActivityID</td>
48                         <td>@i.Name</td>
49                         <td><a href="javascript:;" onclick="del(@i.ActivityID)">删除</a></td>
50                         <td><a href="@Url.Action("Modify", new { id = i.ActivityID })">修改</a></td>
51                     </tr>
52                 }
53             </tbody>
54         </table>
55         <nav>
56             <ul class="pagination pagination-lg">
57                 @for (int i = 1; i <= ViewBag.pageCount; i++)
58                 {
59                     <li @(i == 1 ? "class=active" : "")><a href="javascript:;" onclick="show(@i)">@i</a></li>
60                 }
61             </ul>
62         </nav>
63     </div>
64 </body>
65 </html>

 技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。