不分頁方法
• 數據綁定方式:1.構建數據綁定 2.數據庫查詢綁定
•問題:數據庫查詢後需要構建參數?
• 可以是DataTable、IList<T>等列表結構的數據源。可以是業務構造,也可以來自DbHelper數據庫查詢
using System;
using Carpa.Web.Script;
using Carpa.Web.Ajax;
using System.Data;
using System.Collections.Generic;
namespace CarpaDemo
{
public class Grid : Page
{
public override void Initialize()
{
base.Initialize();
Context["datasource1"] = Grid1Datasource();
}
/// <summary>
/// 不不分頁
/// </summary>
/// <returns></returns>
private DataTable Grid1Datasource()
{
List<string> columns = new List<string>();
columns.Add("GoodsID");
columns.Add("GoodsNo");
columns.Add("GoodsName");
columns.Add("Spell");
columns.Add("KG");
columns.Add("CreateDate");
columns.Add("UpdateDate");
columns.Add("Remark");
DataTable table = new DataTable();
for (int i = 0; i < columns.Count; i++)
{
DataColumn c = new DataColumn();
c.ColumnName = columns[i];
table.Columns.Add(c);
}
DataTable dt = new DataTable();
using (DbHelper db = SysUtils.CreateMySqlDbHelper())
{
string querysql = "select GoodsID, GoodsNo,GoodsName,Spell,KG,CreateDate,UpdateDate,Remark from bd_goods ";
dt = db.ExecuteSQL(querysql);
}
for (var i = 0; i < dt.Rows.Count; i++)
{
object[] record = new object[columns.Count];
record[0] = dt.Rows[i][0];
record[1] = dt.Rows[i][1];
record[2] = dt.Rows[i][2];
record[3] = dt.Rows[i][3];
record[4] = dt.Rows[i][4];
record[5] = dt.Rows[i][5];
record[6] = dt.Rows[i][6];
record[7] = dt.Rows[i][7];
table.Rows.Add(record);
}
return table;
}
}
}
內存分頁方法
•又叫邏輯分頁讀取所有數據放在內存之中,在前端進行分頁處理。
•優點: 會話期間只與數據庫交互一次,若每頁數據量較大,翻頁時間成本小。
•缺點:會佔用較大的內存,不能保證數據是最新的
using System;
using Carpa.Web.Script;
using Carpa.Web.Ajax;
using System.Data;
namespace CarPaDemo1
{
/// <summary>
/// 數據顯示採用內存分頁
/// </summary>
public class Management : Page
{
public override void Initialize()
{
base.Initialize();
Context["DataSource"] = new GDataSource();
}
[Serializable]
public class GDataSource : DbPagerDataSource
{
public GDataSource()
: base(SysUtils.MySqlConnectionString)
{
}
/// <summary>
/// 數據字段的添加
/// </summary>
/// <param name="items"></param>
public override void AddSummaryItems(SummaryItemCollection items)
{
base.AddSummaryItems(items);
items.Add("ID");
items.Add("name");
items.Add("UserType");
items.Add("operate");
items.Add("HostName");
items.Add("IP");
items.Add("AddDate");
}
/// <summary>
/// 數據庫數據選擇
/// </summary>
/// <param name="dbHelper"></param>
/// <returns></returns>
protected override DataTable DoQuery(DbHelper dbHelper)
{
return dbHelper.ExecuteSQL(@"select Login.ID,Login.name,Login.UserType,operate,HostName,IP,
SUBSTRING(CONVERT(CHAR(19),AddDate,120),1,16) as AddDate
from Log join Login on Log.UserName = Login.name order by AddDate desc");
}
}
}
}
數據庫分頁方法
•又叫物理分頁在於數據庫交互的時候進行數據分頁,每次只讀取當前頁的數據
•優點:內存佔用小,可以保證數據是最新的
•缺點:每次分頁必須與數據庫交互
using System;
using Carpa.Web.Script;
using Carpa.Web.Ajax;
using System.Data;
/// <summary>
/// 所有缺陷
/// </summary>
public class AllBug : Page
{
public override void Initialize()
{
base.Initialize();
Context["dataSourse"] = new GDataSource();
}
[Serializable]
public class GDataSource : SqlPagerDataSource
{
public GDataSource()
: base(SysUtils.MySqlConnectionString)
{
}
/// <summary>
/// 全部缺陷,數據採用數據庫分頁
/// </summary>
protected override void DoPrepare(DbHelper dbHelper, SqlPagerParams pagerParams)
{
//關鍵代碼——————————————————————————————————————
string sql = "select Bug_ID,User_Name,P_Name,Bug_Name,Bug_Style,Bug_Status,SUBSTRING(CONVERT(CHAR(10), Bug_Date, 120), 1, 16) as Bug_Date ,Bug_Content from Bug";
//對sql操作
pagerParams.SelectClause = sql;
//將select的結果進行排序
pagerParams.OrderClause = base.GetOrderClause(" order by Bug_ID desc");
pagerParams.PrimaryField = "Bug_Name";
}
}