1. 程式人生 > >C#中構建一個分頁的應用

C#中構建一個分頁的應用

1、SQL分頁語法

SELECT * FROM(
	SELECT ROW_NUMBER() OVER(ORDER BY 排序條件) AS RowNumber,* FROM 表
	WHERE 條件
) TEMP_TABLE WHERE RowNumber BETWEEN (pageIndex - 1) * pageSize + 1 AND pageIndex * pageSize

2、後臺方法

/// <summary>
/// 表名
/// </summary>
private const string _tableNane = "StockIC";

/// <summary>
/// 獲取庫存列表
/// </summary>
public List<StockIcResult> GetStockIcList(StockIcParam param)
{
    List<StockIcResult> list = new List<StockIcResult>();
    string sql = "WITH [temptablefor{0}] AS";
    sql += " (SELECT *,ROW_NUMBER() OVER (ORDER BY {1}) AS RowNumber FROM [{0}] WHERE 1=1 {2})";
    sql += " SELECT * FROM [temptablefor{0}] WHERE RowNumber BETWEEN {3} AND {4}";
    StringBuilder sqlCondition = new StringBuilder();
    List<SqlParameter> sqlParams = new List<SqlParameter>();
    //型號
    if (!String.IsNullOrEmpty(param.Model))
    {
        sqlCondition.AppendFormat(" AND Model LIKE '%{0}%'", param.Model);
    }
    //開始時間
    if (param.BeginTime.HasValue)
    {
        sqlCondition.Append(" AND CreateTime >= @BeginTime");
        sqlParams.Add(new SqlParameter("@BeginTime", param.BeginTime.Value));
    }
    //結束時間
    if (param.EndTime.HasValue)
    {
        sqlCondition.Append(" AND CreateTime < @EndTime");
        sqlParams.Add(new SqlParameter("@EndTime", param.EndTime.Value.AddDays(1)));
    }
    //排序
    if (String.IsNullOrWhiteSpace(param.OrderBy))
    {
        param.OrderBy = " CreateTime DESC";
    }
    //分頁
    Int64 startNumber = (param.PageIndex - 1) * param.PageSize + 1;
    Int64 endNumber = param.PageIndex * param.PageSize;
    //拼裝SQL
    sql = String.Format(sql, _tableNane, param.OrderBy, sqlCondition, startNumber, endNumber);
    //執行SQL語句
    DataSet dataSet = DBHelper.GetReader(sql.ToString(), sqlParams.ToArray());
    list = TranToList(dataSet);
    return list;
}

注意:DBHelper.GetReader()方法、TranToList()方法等請自己完善。

一些計算方法

//分頁
Int64 startNumber = (param.PageIndex - 1) * param.PageSize + 1;
Int64 endNumber = param.PageIndex * param.PageSize;
//總頁數 = (資料總數 + 分頁大小 -1) / 分頁大小
TotalPage = (TotalCount + PageSize - 1) / PageSize;

相關推薦

C#構建一個應用

1、SQL分頁語法 SELECT * FROM( SELECT ROW_NUMBER() OVER(ORDER BY 排序條件) AS RowNumber,* FROM 表 WHERE 條件 )

項目一個功能pagination

log item -c 重新 ota cal isp business time 項目中的一個分頁功能pagination <script> //總頁數 var total = 0; var pageCount = 0

.Net的AOP系列之構建一個汽車租賃應用

本篇目錄 本系列的原始碼本人已託管於Coding上:點選檢視。 本系列的實驗環境:VS 2013 Update 5(建議最好使用集成了Nuget的VS版本,VS Express版也夠用),安裝了PostSharp。 這篇部落格覆蓋的內容包括: 為專案建立需求 從零編寫程式碼來滿足需求 不使用AOP重

python的萬能

count prev pytho () 返回對象 數據 page 當前 obj 若是使用django這個框架,這個框架自帶了一個分頁的功能! Paginator對象 方法init(列表,int):返回分頁對象,參數為列表數據,每面數據的條數 屬性count:返回對象總數

彈出框的AJAX

.ajax index sele ref col reload top html splice $(function() { $("body").on("click",".set-topic",function(){ /*獲取所有題目接口

Xamarin.Forms使用LiteDB

geb git utc 數據緩存 orm end mes 條件 query Xamarin.Forms中使用LiteDB分頁 在移動應用的開發中,為力提高用戶體驗,一般都會在本地設計一套數據緩存。這裏我使用的是LiteDB來緩存數據。 LiteDB是.Net平臺的一個開

python---django自帶類使用

1.基礎使用: 後臺資料獲取: from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage#錯誤判斷 List_info = [] for i in range(1000): List_info.

如何在報表實現強制效果

  使用Word編輯文件,當文字或圖形等內容填滿一頁時,Word會插入一個自動分頁符並開始新的一頁。如果要在某個特定位置強制分頁,可手動插入分頁符(分隔符內),這樣可以確保章節標題總在新的一頁開始。 對於報表來講,同樣有類似的需求,比如一個訂單包括訂單資訊(訂單編號、貨主資訊、各種

rest_framworkApiView實現

1 from rest_framework.pagination import PageNumberPagination 2 from .serializers import BookSerilizer 3 from .models import BookInfo 4 from rest_fra

tp5框架jquery+jaxa

jaxa分頁,點選按鈕直接替換資料, //php程式碼$page=Request::instance()->param("page"); $page = empty($page)?1:$page; $count = Db::table('week3')->c

使用vue完成一個效果

基於 element-ui 分頁元件實現分頁效果 效果如下:   使用說明: 0.首先在頭部引入需要的外部檔案 1.從element官方網頁中複製想要的元件程式碼直接放入body中 2.編寫邏輯程式碼 3.完成列表的資料渲染 1.html程式碼如下: 1 <!DOCT

ASP.NET Web API構建一個簡單的應用

使用ASP.NET Web API構建一個簡單的應用。 示例:使用ASP.NET Web API提供獲取使用者列表和使用者資訊介面。 1、在Models目錄下建立使用者資訊類(UserModel.cs) /// <summary> /// 使用者資訊類 /// </

採用 vue+webpack 構建的單應用——私人部落格 MintloG 誕生記

寫於 2016.03.18 介紹 專案地址:github.com/jrainlau/Mi… (特別亂,參考就好-_-|||) MintloG是我在五天之內完全由自己開發的私人部落格,前端技術方案採用了vue+vue-router+vue-resource+webpack的構建方案

C++定義一個不能被繼承的類(友元類+類模板)

自從C++11標準出來之後,就有了關鍵字final可以直接宣告一個類不能被繼承。那麼,在此之前如果想要一個類不能被繼承,可能還需要下一番功夫。 文章目錄 1.宣告建構函式為私有 2.子類宣告為基類的友元類 3.虛繼承——子類

c++一個同名的const成員函式與非const成員函式為什麼可以構成過載

#include<iostream> using namespace std; class Test { public: Test(int v):data(v){} void print()//this指標的型別是Test * { cout<&

mybatisoracle實現效果

首先當我們需要通過xml格式處理sql語句時,經常會用到< ,<=,>,>=等符號,但是很容易引起xml格式的錯誤,這樣會導致後臺將xml字串轉換為xml文件時報錯,從而導致程式錯誤。   這樣的問題在iBatiS中或者自定義的xml處理sql的程式中經常需要我

angularjs指令寫一個

框架: angularjs +angula-material 背景: angularjs material提供的分頁樣式不滿足專案的需求,需要自定義分頁的樣式。 如圖所示: 增加了首頁/末頁,上一頁/下一頁,更多頁面… html: <

hibernate的通用basedao

hibernate原生態分頁寫法 public List<Book> list1(Book book,PageBean pageBean) { Session session = SessionFactoryUtil.getSession();

用vue.js的v-for,v-if,computed寫一個樣式

在學Vue,總想寫個分頁,先寫了一個樣式。 主要看思路: 思路簡單,得到總頁數,判斷總頁數,迴圈。 先判斷總頁數是否需要分頁,總頁數==1頁就不分了。 再判斷總頁數<11就不用……。 總頁數>11,就要用到1…… 678 …… 末頁 通過v-if 判斷,通過v-for迴圈。 效果圖: 程式碼如

golang的一個方法

需要做一分頁。。就做了個方法,beego裡的例子太麻煩了。還是弄個簡單的吧,上程式碼。。  //分頁方法,根據傳遞過來的頁數,每頁數,總數,返回分頁的內容 7個頁數 前 1,2,3,4,5 後 的格式返回,小於5頁返回具體頁數 func Paginator(page, pr