asp.net mvc4 mysql製作簡單分頁組件(部分視圖)_實用技巧

來源:互聯網
上載者:User

在開始做mysql分頁功能組件前,便設定的是要有一定可複用性。先在項目裡Views檔案夾下右鍵建立名為_PaginationComponent.cshtml,這裡html及css我採用的bootstrap分頁組件,這可以參考http://v3.bootcss.com/components/。

先將產生項目效果截圖呈上:

  這裡有需要預Crowdsourced Security Testing道的,是mysql分頁查詢與mssql分頁查詢實現不同點在於,mysql支援limit語句,limit格式為 limit pageIndex*pageSize,pageSize,pageIndex--為頁數,pageSize--為頁麵包含資料量。limit具體用法可查詢mysql手冊。然後需要預先定義好pageSize,pageIndex,pageCount(分頁總數)三個量。這裡預設pageSize為30,即: int pageSize = 30。

  首先來實現擷取pageCount:思路是,先將要擷取的所有資料集從資料庫中取出,根據pageSize = 30得出總頁數,這裡會遇到資料集數量為30的倍數與否問題,解決是:

 MySqlCommand comm_1 = new MySqlCommand(sqlSearch, connection);   MySqlDataAdapter da_1 = new MySqlDataAdapter(sqlSearch, connection);   da_1.SelectCommand = comm_1; //初始化da.fill的命令   DataSet set_1 = new DataSet();   da_1.Fill(set_1);   DataTable dt_1 = set_1.Tables[0]; //使用datatable裝所得多張表資料,並擷取裡面的第一張表     Count = (double)(dt_1.Rows.Count) / 30;//分頁總頁數   if (Count > (int)(dt_1.Rows.Count) / 30)   {    pageCount = (dt_1.Rows.Count) / 30 + 1;   }   else if (Count == (dt_1.Rows.Count) / 30)   {    pageCount = (dt_1.Rows.Count) / 30;   }   else if (Count < (int)(dt_1.Rows.Count) / 30)   {    pageCount = 1;   }

這裡用到判斷,大於30的pageCount均往上加1,小於30的pageCount為1。

接下來要實現的是用pageIndex傳頁數擷取對應的資料集,思路是利用limit語句特性: 

 public List<Model> GetDormitoryBottleRecycleListPagination(int pageIndex, int pageSize)  {   Get_Connection();   List<Model> list = null;string sqlPaginatioSearch = "SELECT * FROM table ORDER BY file_1 ASC LIMIT " + (pageIndex - 1) * 30 + "," + pageSize + "";      //填充分頁後的資料   MySqlCommand comm_2 = new MySqlCommand(sqlPaginatioSearch, connection);   MySqlDataAdapter da_2 = new MySqlDataAdapter(sqlPaginatioSearch, connection);   da_2.SelectCommand = comm_2; //初始化da.fill的命令   DataSet set_2 = new DataSet();   da_2.Fill(set_2);   DataTable dt_2 = set_2.Tables[0]; //使用datatable裝所得多張表資料,並擷取裡面的第一張表        if (dt_2 != null && dt_2.Rows.Count > 0)   {    list = new List<Model>();    foreach (DataRow row in dt_2.Rows)    {     Model entity = sqlhelper.CreateItem(row);     list.Add(entity);    }   }   Close_Connection();   return list;  }

string sqlPaginatioSearch = "SELECT * FROM table ORDER BY file_1 ASC LIMIT " + (pageIndex - 1) * 30 + "," + pageSize + ""; //填充分頁後的資料
這是核心sql語句,通過pageIndex傳入頁面數,從(pageIndex - 1) * 30處開始取pageSize量的資料。
在控制器的action中實現也是關鍵:

public ActionResult DormitoryBottleRecycleSort(int id = 1)  {   int pageIndex = id;//傳遞分頁數   int pageSize = 30;   int pageCount = 0;      List<BottleRecycleModel> list_1;   list_1 = pbsAccess.GetDormitoryBottleRecycleListPagination(pageIndex, pageSize, pageCount);//擷取分頁列表   ViewBag.ListCount = list_1.Count;   BottleRecycleList viewBottleRecycleList = new BottleRecycleList();   viewBottleRecycleList.bottleRecycleList = new List<BottleRecycleModel>();//要執行個體化對象,相當重要        //這裡是為顯示分頁資料的功能代碼   if (list_1 != null)   {    foreach (var item in list_1)    {     BottleRecycleModel viewBottleRecycle = new BottleRecycleModel();     viewBottleRecycle.Id = item.Id;     viewBottleRecycle.DormitoryNumber = item.DormitoryNumber;     viewBottleRecycle.SmallBottleNumber = item.SmallBottleNumber;     viewBottleRecycle.BigBottleNumber = item.BigBottleNumber;     viewBottleRecycle.TotalBottleNumber = item.TotalBottleNumber;     viewBottleRecycle.PublishTime = item.PublishTime;     viewBottleRecycleList.bottleRecycleList.Add(viewBottleRecycle);         }    ViewBag.DormitoryBottleRecycleSort = viewBottleRecycleList.bottleRecycleList;       }   else   {    ViewBag.DormitoryBottleRecycleSort = null;   }      ViewBag.pageCount = pbsAccess.getDormitoryBottlePaginationPageCount();   ViewBag.pageIndex = pageIndex;   return View(ViewBag);  }

  這裡使用ViewBag進行傳值,這裡的getDormitoryBottlePaginationPageCount()就是上面pageCount得出的方法。這是背景方法。

  現在說一下_PaginationComponent.cshtml裡該如何運用這些值。

@{ string Controllers = ViewContext.RouteData.Values["controller"].ToString(); string Actions = ViewContext.RouteData.Values["Action"].ToString();}<li><a href="#">«</a></li>@for (int i = 1; i < @ViewBag.pageCount + 1; i++){ <li><a href="/@Controllers/@Actions/@i">@i</a></li>}<li><a href="#">»</a></li>

  為了進行組件複用,採用ViewContext.RouteData.Values["controller"].ToString()方法,這樣,在其他頁面裡引用組件時,可以輕易移植過去如:<a href="/@Controllers/@Actions/@i">@i</a>,當然,實用for迴圈是為了顯示出更多的頁數,諸如1、2、3、4等等,這裡我的資料比較少,因此只顯示一頁,當然還有其他功能諸如省略過多頁數為省略符號和當前頁禁用等等,需要js其他代碼來實現,這裡只為了實現一個簡單的分頁組件功能。

  這個頁面裡的代碼並非全部分頁的源碼,這裡只提供我個人解決時思路,如果有錯誤,還請指正,必定虛心求教。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.