asp.net中条件查询+分页
大家好,我是雄雄,歡迎關注公眾號:雄雄的小課堂。
今天,分享的是asp.net中條件查詢+分頁的小案例。
如下圖所示:
各個功能模塊均已標注,先大致介紹一下業務。
\1. 點擊左側圖書類別,根絕類別編號在右側查詢顯示該類別中的所有圖書列表(分頁查詢)
\2. 下拉排序方式,可以根據價格排序和出版日期排序。當下拉列表改變值時,圖書列表按照排序方式改變。
\3. 右上角顯示為分頁信息,左箭頭表示上一頁,右箭頭表示下一頁。
數據訪問層(DAL):
1.需要根據“類別編號”“當前頁”“頁大小”以及“排序方式”查詢圖書列表,代碼如下:
// 1.當前頁,頁大小,類別,排序依據--》得到數據集合public List<Books> GetPageBooks(int currPage, int pageSize, string orderBy, int cateId){string sql = "select top " + pageSize + " * from Books where id not in (select top " + (currPage - 1) * pageSize + " id from Books where CategoryId = " + cateId + " order by " + orderBy + ") and CategoryId = " + cateId + " order by " + orderBy + "";List<Books> bList = new List<Books>();SqlDataReader dr = SqlHelper.ExecuteReader(sql, null);while (dr.Read()){Books b = new Books();b.Id = Convert.ToInt32(dr[0]);b.Title = dr[1].ToString();b.Author = dr[2].ToString();b.PublisherId = Convert.ToInt32(dr[3].ToString());b.PublishDate = Convert.ToDateTime(dr[4].ToString());b.ISBN = dr[5].ToString();b.UnitPrice = Convert.ToDouble(dr[6].ToString());b.ContentDescription = dr[5].ToString();b.CategoryId = Convert.ToInt32(dr[0]);b.Clicks = Convert.ToInt32(dr[0]);bList.Add(b);}return bList;}2.需要根據類別查詢總記錄數,從而在前臺計算總頁數,代碼如下:
//總記錄數//類別public int GetTotalNum(int cateId){int rel = 0;string sql = "select count(*) from Books where CategoryId = @CategoryId";SqlParameter[] param = { new SqlParameter("@CategoryId", cateId) };rel = Convert.ToInt32(SqlHelper.ExecuteScalar(sql, param));return rel;}業務邏輯層(BLL):
將DAL的兩個方法可以結合起來,將數據集合(圖書列表)和總記錄數(根據類別查詢)帶出去,在控制器中獲取,代碼如下:
public List<Books> GetPageList(int currPage, int pageSize, string orderBy, int cateId, out int totalNum){totalNum = bs.GetTotalNum(cateId);return bs.GetPageBooks(currPage, pageSize, orderBy, cateId);}前臺業務分析:
點擊類別,展示圖書列表比較簡單,這里一帶而過,不細說,代碼如下(利用了內聯視圖):
<%List<BookShop.Models.Categories> cateList = ViewData["cateList"] as List<BookShop.Models.Categories>;foreach(BookShop.Models.Categories cate in cateList){%><li><%=Html.ActionLink(cate.Name, "BooksList", "Books", new { id=cate.Id}, null)%></li> <%}%>圖書列表頁:圖書列表通過強類型視圖遍歷展示。
接下來,我們可以將當前頁、排序方式放在form表單中往控制器中傳值(不放也可以,利用jQuery直接獲取值,稍微麻煩點),當改變下拉列表的值時,提交form表單,form表單的代碼如下:
<form action="<%=Url.Action("BooksList", "Books", new {id=ViewData["cateid"]})%>" method="post" id="mainForm"><input type="hidden" name="orderBy" value="<% =ViewData["orderBy"] %>"/><input type="hidden" name="currPage" value="<% =ViewData["currPage"] %>"/></form>相關jquery代碼如下:
<script type="text/javascript">//jQuery代碼$(function () {var orderBy = $("input[name='orderBy']").val();$("select[name='list_type']").val(orderBy);$("select[name='list_type']").change(function () {$("input[name='orderBy']").val($(this).val());$("input[name='currPage']").val(1);$("#mainForm").submit();});});</script>上一頁:
點擊上一頁時,獲取表單中當前頁的值,然后進行判斷,如果當前頁是第一頁,則無序操作,否則當前也減1,最后提交表單。
//上一頁$("#turn_pre").click(function () {//當前頁減1var currPage = $("input[name='currPage']").val();if (currPage > 1) {currPage = currPage-1;}$("input[name='currPage']").val(currPage);$("#mainForm").submit();});下一頁:
點擊下一頁時,獲取表單中當前頁的值,還需要獲取控制器往頁面傳遞的總頁數,然后進行判斷,如果當前頁等于總頁數,則無序操作,否則當前頁加1,最后提交表單。
//下一頁$("#turn_next").click(function () {//當前頁減1var currPage = $("input[name='currPage']").val();var totalPage = <%=ViewData["totalPage"]%>;if(totalPage!=currPage){currPage = parseInt(currPage) + 1;}$("input[name='currPage']").val(currPage);$("#mainForm").submit();});控制器(BooksController):
首先,根據前臺頁面的需求,我們可以知悉,控制器的動作方法中,最少需要【當前頁】【頁大小】【類別編號】【排序方式】幾個值,【當前頁】和【排序方式】我們可以直接從form表單中獲取,【類別編號】可以從路由中獲取,【頁大小】直接寫成死的就可以,代碼如下:
public ActionResult BooksList() {//類別號int cateid =Convert.ToInt32(RouteData.Values["id"]);//排序依據string orderBy = Request.Form["orderBy"] == null ? "PublishDate" : Request.Form["orderBy"];//當前頁int currPage = Request.Form["currPage"] == null ? 1 : Convert.ToInt32(Request.Form["currPage"]);//頁大小int pageSize = 5;int totalNum = 0;List<Books> bList = bm.GetPageList(currPage, pageSize, orderBy, cateid, out totalNum);ViewData["currPage"] = currPage;ViewData["orderBy"] = orderBy;ViewData["cateid"] = cateid;int totalPage = totalNum % pageSize == 0 ? totalNum / pageSize : (totalNum / pageSize) + 1;ViewData["totalPage"] = totalPage;return View(bList);}總結
以上是生活随笔為你收集整理的asp.net中条件查询+分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10删除双系统的方法电脑双系统如何
- 下一篇: WinXP电脑通过手机上网的方法如何电脑