簡單分頁控制項

来源:http://www.cnblogs.com/junshijie/archive/2016/08/25/5807234.html
-Advertisement-
Play Games

這幾天無意間看到一個關於分頁的帖子,覺得寫得挺好的。關於這些東西,自己一直都是只知道原理,卻沒有真正動手做過,於是研究了一下分頁的原理自己動手寫了一個十分特別非常簡單的分頁程式,在這裡與大家分享一下。 這個程式取數據使用的ado.net,首先先新建一個取數據的類PageDAl 然後記得修改一下web ...


這幾天無意間看到一個關於分頁的帖子,覺得寫得挺好的。關於這些東西,自己一直都是只知道原理,卻沒有真正動手做過,於是研究了一下分頁的原理自己動手寫了一個十分特別非常簡單的分頁程式,在這裡與大家分享一下。

這個程式取數據使用的ado.net,首先先新建一個取數據的類PageDAl

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Web;

namespace page.DAL { public class PageDal { public DataTable GetUserList(out int totalCount, int pageIndex = 1, int pagesize = 10) { using ( SqlConnection coon = new SqlConnection(ConfigurationManager.ConnectionStrings["userConnection"].ConnectionString)) { coon.Open(); string sqlCount = "select count(F_Id) from Sys_User"; SqlCommand cmd = new SqlCommand(sqlCount, coon); totalCount = int.Parse(cmd.ExecuteScalar().ToString()); string sql = "select F_Account,F_RealName from (select *,Row_Number() over(order by F_Account) r from Sys_User)as w where r>{0} and r<={1};"; SqlDataAdapter ad = new SqlDataAdapter(String.Format(sql, (pageIndex - 1) * pagesize, (pageIndex * pagesize)), coon); DataTable dt = new DataTable(); ad.Fill(dt); return dt; } } } }

然後記得修改一下webconfig裡面的連接資料庫的字元串,資料庫自己隨便建一個就行。

接下來是ashx一般處理程式,html頁面把需求傳過來,他在從PageDal中取數據。

using page.DAL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Web;

namespace page
{
    /// <summary>
    /// WebHandler 的摘要說明
    /// </summary>
    public class WebHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                int pageIndex = int.Parse(context.Request.Form["pageindex"]);
                int pageSize = int.Parse(context.Request.Form["pagesize"]);
                PageDal pd = new PageDal();
                int totalCount;
                DataTable dt = pd.GetUserList(out totalCount, pageIndex, pageSize);
                string json = ToJson(dt, "data", totalCount);
                context.Response.ContentType = "text/plain";
                context.Response.Write(json);
            }
            catch
            {
                context.Response.Write("error");
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        /// <summary>
        /// DataTable轉換為Json
        /// </summary>
        public static string ToJson(DataTable dt, string jsonName, int count)
        {
            StringBuilder Json = new StringBuilder();
            if (string.IsNullOrEmpty(jsonName))
                jsonName = dt.TableName;
            Json.Append("{\"" + jsonName + "\":[");
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Json.Append("{");
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        Type type = dt.Rows[i][j].GetType();
                        Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type));
                        if (j < dt.Columns.Count - 1)
                        {
                            Json.Append(",");
                        }
                    }
                    Json.Append("}");
                    if (i < dt.Rows.Count - 1)
                    {
                        Json.Append(",");
                    }
                }
            }
            Json.Append("],");
            Json.Append("\"count\":" + count + "}");
            return Json.ToString();
        }

        /// <summary>
        /// 格式化字元型、日期型、布爾型
        /// </summary>
        /// <param name="str"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        private static string StringFormat(string str, Type type)
        {
            if (type == typeof(string))
            {
                str = String2Json(str);
                str = "\"" + str + "\"";
            }
            else if (type == typeof(DateTime))
            {
                str = "\"" + str + "\"";
            }
            else if (type == typeof(bool))
            {
                str = str.ToLower();
            }
            else if (type != typeof(string) && string.IsNullOrEmpty(str))
            {
                str = "\"" + str + "\"";
            }
            return str;
        }

        /// <summary>
        /// 過濾特殊字元
        /// </summary>
        /// <param name="s">字元串</param>
        /// <returns>json字元串</returns>
        private static string String2Json(String s)
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < s.Length; i++)
            {
                char c = s.ToCharArray()[i];
                switch (c)
                {
                    case '\"':
                        sb.Append("\\\""); break;
                    case '\\':
                        sb.Append("\\\\"); break;
                    case '/':
                        sb.Append("\\/"); break;
                    case '\b':
                        sb.Append("\\b"); break;
                    case '\f':
                        sb.Append("\\f"); break;
                    case '\n':
                        sb.Append("\\n"); break;
                    case '\r':
                        sb.Append("\\r"); break;
                    case '\t':
                        sb.Append("\\t"); break;
                    default:
                        sb.Append(c); break;
                }
            }
            return sb.ToString();
        }
    }
}

最後就是html代碼了

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="../Content/jquery/jquery-1.11.1.min.js"></script>
    <title></title>
</head>
<body>
    <table id="datatable"></table>
    <div id="pageination" style="width: 100%">
        <a href="javascript:void(0);" onclick="GoFirst()">首頁</a>&nbsp;<a href="javascript:void(0);" onclick="GoPre()">上一頁</a>&nbsp;&nbsp;<span>當前<input id="pageindex" type="text" style="width:20px" value="1" disabled="disabled" />頁,總共<input id="totalcount" type="text" style="width:20px" value="" disabled="disabled" />條數據,共<input id="pagecount" type="text" style="width:20px" value="" disabled="disabled" />頁</span>&nbsp;&nbsp;<a href="javascript:void(0);" onclick="GoNext()">下一頁</a>&nbsp;<a href="javascript:void(0);" onclick="GoLast()">尾頁</a>
    </div>
</body>
</html>
<script>
    var pageindex = 1;
    var pagesize = 15;
    $(function () {
        search();
    });
    function search() {
        $.ajax({
            url: "../WebHandler.ashx",
            type: "post",
            data: {
                "pagesize": pagesize,
                "pageindex": pageindex
            },
            success: function (daa) {
                var json = JSON.parse(daa);
                var tab = $("#datatable");
                tab.empty();
                for (var i = 0; i < json.data.length ; i++) {
                    tab.append("<tr><td>" +
                        json.data[i].F_Account +
                        "</td><td>" +
                        json.data[i].F_RealName +
                        "</td></tr>");

                }
                var count = json.count;
                var pagecount = Math.ceil(count / pagesize);
                $("#totalcount").val(count);
                $("#pagecount").val(pagecount);
            }
        });
    };
    function GoFirst() {
        pageindex = 1;
        $("#pageindex").val(pageindex);
        search();
    };
    function GoLast() {
        var pageindex = $("#pagecount").val();
        $("#pageindex").val(pageindex);
        search();
    };
    function GoPre() {
        if (pageindex > 1) {
            pageindex = pageindex - 1;
            $("#pageindex").val(pageindex);
            search();
        } else {
            alert("這是第一頁!");
        }
    };
    function GoNext() {
        var pagecount = $("#pagecount").val();
        if (pageindex < pagecount) {
            pageindex = pageindex + 1;
            $("#pageindex").val(pageindex);
            search();
        } else {
            alert("這是最後一頁!");
        }
    };
</script>

看完那篇帖子自己又對照的看了一下公司做的分頁,總結了一下,以前都沒認真想過關於分頁的東西,覺得還挺難的,但經過一次總結髮現其實只要你按順序一點一點理清楚,有一個清晰的思路,完全不難的。

首先取數據,分兩個部分,一個是把所有的數據個數統計出來另一個是取當前頁碼的數據,這個是很簡單的,自己把有關的sql語句寫好就行,sql語句的寫法有很多,我取當前頁碼用的語句是

select F_Account,F_RealName from (select *,Row_Number() over(order by F_Account) r from Sys_User)as w where r> (pageIndex - 1) * pagesize and r<=pageIndex* pagesize

數據取出來之後就是把頁面欄拼好,並且把相關的方法寫好,比如說首頁,前一頁,下一頁,尾頁等,之後把數據總數傳過來,計算頁數就OK了。

<div id="pageination" style="width: 100%">
        <a href="javascript:void(0);" onclick="GoFirst()">首頁</a>&nbsp;<a href="javascript:void(0);" onclick="GoPre()">上一頁</a>&nbsp;&nbsp;<span>當前<input id="pageindex" type="text" style="width:20px" value="1" disabled="disabled" />頁,總共<input id="totalcount" type="text" style="width:20px" value="" disabled="disabled" />條數據,共<input id="pagecount" type="text" style="width:20px" value="" disabled="disabled" /></span>&nbsp;&nbsp;<a href="javascript:void(0);" onclick="GoNext()">下一頁</a>&nbsp;<a href="javascript:void(0);" onclick="GoLast()">尾頁</a>
    </div>


function GoFirst() {
        pageindex = 1;
        $("#pageindex").val(pageindex);
        search();
    };
    function GoLast() {
        var pageindex = $("#pagecount").val();
        $("#pageindex").val(pageindex);
        search();
    };
    function GoPre() {
        if (pageindex > 1) {
            pageindex = pageindex - 1;
            $("#pageindex").val(pageindex);
            search();
        } else {
            alert("這是第一頁!");
        }
    };
    function GoNext() {
        var pagecount = $("#pagecount").val();
        if (pageindex < pagecount) {
            pageindex = pageindex + 1;
            $("#pageindex").val(pageindex);
            search();
        } else {
            alert("這是最後一頁!");
        }
    };

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我準備安裝到/usr/local目錄下 1. cd /usr/local 2. 安裝GCC 和GCC-C++ yum install gcc yum install -y gcc gcc-c++ 3. 安裝pcre庫 cd /usr/local/wget ftp://ftp.csx.cam.ac.u ...
  • Tomcat需要JDK的支持,所以安裝Tomcat前先安裝JDK。 一、首先到JDK官網下載與自己機器相應的JDK。註意機器位數,Linux系統的話可以用uname -a命令查看系統信息,如果是Ubuntu的系統,下載尾碼為.tar.gz的就行。 我64位的機器下的是這個JDK:wget http: ...
  • 我們在編寫程式時,會在程式運行過程中記錄一些日誌。log4net作為一款經久耐用的日誌組件,值得我們信賴。在中小型公司中,往往沒有專業的日誌伺服器來處理應用程式產生的日誌,而格式化不好的日誌文件又為上線後日誌的統計、分析、查找造成了困難。 Excel作為一款常用的辦公軟體,用來處理一些中小數量級的數 ...
  • 誠意滿滿直接上代碼: 併在Program類(Main函數所在類)中,增加如下函數即可: 註意:如果在CurrentDomain_UnhandledException中只列印異常而不終止程式的話,該異常仍然會被拋出,最終還是會導致彈出“XXX已停止工作”的對話框,所以如果不想彈框讓程式卡住的話就需要用 ...
  • WPF常用的第三方控制項集,DevExpress 下麵介紹如何生成Chart界面: DevExpress官方下載地址 ...
  • ContextMenuStrip是就是所說的右鍵菜單,在VS里可以直接新建,挺方便。但是跟著師父看了很多代碼,發現了好多時候都需要自己寫這部分代碼。這個部分目前為止我瞭解的還不是很多,更細緻的就只有等後面再深入瞭解到了再記了。 現在是將contextmenustrip綁定到label上面去,新建了一 ...
  • ...
  • 在很多人或許很多技術大神都會覺得IIS的安裝和4.0沒得先後順序的。其錯誤弊端在與IIS沒有註冊到4.0上。 經過今天遇到了伺服器安裝服務端發覺報錯【無法識別的屬性“targetFramework”。請註意屬性名稱區分大小寫。錯誤解決辦法】客戶端報404錯誤,這個時候我們都會覺得沒有找到相對應的路徑 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...