码迷,mamicode.com
首页 > 其他好文 > 详细

EF真分页实例

时间:2015-08-26 20:01:02      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

ef框架十分的便利简单的tolist就可以加载列表,再也不用写麻烦的sql语句了。这里给大家介绍下ef框架下tolist的分页方法,直接上代码

(这里我用了简单的3层)首先是DAL层

  

技术分享
1 public List<Model.Event> GetPagedListBy<TKey>(int pageIndex, int pageSize,out int pageCount, Expression<Func<Model.Event, bool>> whereLambda, Expression<Func<Model.Event, TKey>> orderBy)
2         {
3             pageCount= db.Event.Where(whereLambda).ToList().Count()%pageSize!=0?db.Event.Where(whereLambda).ToList().Count()/pageSize+1:
4             db.Event.Where(whereLambda).ToList().Count()/pageSize;
5             return db.Event.Where(whereLambda).OrderByDescending(orderBy).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
6         }
View Code

 

解释下这里,首先在DAL层定义了一个方法GetPageListBy(),里面的5个参数分别是 当前页、每页条数、总页数、查询条件、排序方式,这里要注意out的用法,在参数定义前out是返回参数的意思,当查询时可以返回一个变量到方法。

然后是BLL层

技术分享
1 public List<Model.Event> GetPagedListBy<TKey>(int pageIndex, int pageSize,out int pageCount,
2             Expression<Func<Model.Event, bool>> whereLambda, Expression<Func<Model.Event, TKey>> orderBy)
3         {
4             return dal.GetPagedListBy(pageIndex, pageSize,out pageCount, whereLambda, orderBy);
5         }
View Code

 

  这里没什么好解释的,pageCount也要out,还有要引用DAL层

然后就可以调用这个分页方法了,首先在客户端加上repeater控件绑定数据和简单的分页按钮butten

  

技术分享
 1 <asp:Repeater ID="rptList" runat="server">
 2                 <ItemTemplate>
 3                     <tr>
 4                         <td><%#Container.ItemIndex +1%></td>//行号
 5                         <td><%#Eval("QuestionName") %></td>//数据
 6                         <td><%#Eval("AnswerName") %></td>//数据
 7                         <td><%#Eval("Qtime") %></td>//数据
 8                     </tr>
 9                 </ItemTemplate>
10             </asp:Repeater>
11 
12         <div  style="margin: 0 auto; text-align: right; margin-top: 10px;">
13             <asp:Label ID="lblPage" runat="server" Text="当前 "></asp:Label>
14             <asp:Button ID="btnPrev" runat="server" Text="上一页" OnClick="btnPrev_Click" />
15             <asp:Button ID="btnNext" runat="server" Text="下一页" OnClick="btnNext_Click" />
16         </div>
View Code

 

然后是服务器端

技术分享
 1         private int CurrentPage//定义当前页
 2         {
 3             get
 4             {
 5                 object currentPage = this.ViewState["CurrentPage"];
 6                 return currentPage == null ? 1 : Convert.ToInt32(currentPage);
 7             }
 8             set
 9             {
10                 this.ViewState["CurrentPage"] = value;
11             }
12         }
13 
14         private void Data_Binding()//查询方法
15         {
16             const int pageSize = 10;//每页条数
17             int pageCount = 0;//临时变量
18             List<Model.Event> list = bll.GetPagedListBy(CurrentPage, pageSize, out pageCount, p => p.IsSolve == 0, p => p.ID);//根据IsSolve字段查询,ID排序
19             this.btnPrev.Enabled = CurrentPage != 1;z//当前页1将上一页按钮固定
20             this.btnNext.Enabled = CurrentPage != pageCount;//最后一页将下一页按钮固定
21             this.lblPage.Text = "当前 " + CurrentPage.ToString() + "/" + pageCount.ToString();//显示当前页
22             this.rptList.DataSource = list;//数据绑定
23             this.rptList.DataBind();
24 
25         }
26 //按钮事件
27         protected void btnPrev_Click(object sender, EventArgs e)
28         {
29             CurrentPage -= 1;
30             Data_Binding();
31         }
32 
33         protected void btnNext_Click(object sender, EventArgs e)
34         {
35             CurrentPage += 1;
36             Data_Binding();
37         }
38 
39 //调用方法
40 protected void Page_Load(object sender, EventArgs e)
41         {
42             if (!IsPostBack)
43             {
44                 
45                 {
46                     Data_Binding();
47                 }
48 
49             }
50 
51         }
View Code

简单的分页,自己试试效果吧,这里就不上图了

 

EF真分页实例

标签:

原文地址:http://www.cnblogs.com/Ayaya/p/4761330.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!