這幾天無意間看到一個關于分頁的帖子,覺得寫得挺好的。關于這些東西,自己一直都是只知道原理,卻沒有真正動手做過,于是研究了一下分頁的原理自己動手寫了一個十分特別非常簡單的分頁程序,在這里與大家分享一下。
這個程序取數據使用的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("http:///""); break; case '//': sb.Append("http:////"); break; case '/': sb.Append("http:///"); break; case '/b': sb.Append("http://b"); break; case '/f': sb.Append("http://f"); break; case '/n': sb.Append("http://n"); break; case '/r': sb.Append("http://r"); break; case '/t': sb.Append("http://t"); break; default: sb.Append(c); break; } } return sb.ToString(); } }}
新聞熱點
疑難解答
圖片精選