Carpa3平臺常用分頁方式

不分頁方法


• 數據綁定方式: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";
            }
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章