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 }
解释下这里,首先在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 }
这里没什么好解释的,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>
然后是服务器端
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 }
简单的分页,自己试试效果吧,这里就不上图了
时间: 2024-10-12 14:28:02