不分页方法
• 数据绑定方式: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";
}
}