【乾物】さらにデータページングコントロールをアップする━より柔軟で、より実用的である


データ・ページング・コントロールの追加-より柔軟で実用的
データのページングに関する記事が多すぎて、それぞれのシナリオがありますが、ほとんどが似ています.ストレージ・プロシージャを使用するか、コードを直接使用してページングします.様々なシナリオのページングの効率も異なり、最も効率的な(実際のプロジェクトの状況に基づいて)を探す必要はありません.最も適切なものを探せばOKです.次にお話しするページングコントロールは非常に柔軟で、任意のタイプのデータベースをサポートし、ストレージ・プロシージャやコードのページングをサポートします.(自動的に判断します)、複数のテーブルのページングもサポートされていて、とても便利です.データのページングに関する文章は、私のブログでたくさん見つけることができます.以下、簡単なまとめをして、皆さんが調べるのに便利です.
1、オリジナル企業レベルコントロールライブラリのビッグデータ量ページングコントロール
2、さらにデータページングコントロールをアップする(ストレージプロセスを使わない)
3、 RDIFramework.NETにおけるマルチテーブル関連クエリーのページングインスタンス
次に共有するページングコントロールは、データベースに関連する操作を行わずにページングのみを行います.ページングコントロールにページングされたデータを直接提供すればよい.データ・ソースが何であるかは気にしないし、データのページング方法(ストレージ・プロシージャやコードなど)も気にしない.このページング・コントロールは、次の図に示すように、UcPagerExと名付けられています.
 
ページングコントロールを実現するコードは非常に簡単で、以下に直接すべてのソースコードを提供します.参考にして、ページングコントロール全体のソースコードは以下の通りです.
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace RDIFramework.Controls
{
    public delegate void PageChangedEventHandler(object sender, EventArgs e);
    /// 
    ///       ,                
    /// 
public partial class UcPagerEx : UserControl
{
        public event PageChangedEventHandler PageChanged;
        private int _pageSize;
        private int m_PageCount;
        private int _recordCount;
        private int _pageIndex;


        public UcPagerEx()
        {
            InitializeComponent();
            this._pageSize = 10;
            this._recordCount = 0;
            this._pageIndex = 1; //      
        }
        ///  
        ///         
        ///      
        ///     
        /// 
        public UcPagerEx(int recordCount, int pageSize)
        {
            InitializeComponent();

            this._pageSize = pageSize;
            this._recordCount = recordCount;
            this._pageIndex = 1; //      
            this.InitPageInfo();
        }
        protected virtual void OnPageChanged(EventArgs e)
        {
            if (PageChanged != null)
            {
                InitPageInfo();
                PageChanged(this, e);
            }
        }
        [Description("               "), DefaultValue(20), Category("  ")]
        public int PageSize
        {
            set
            {
                this._pageSize = value;
            }
            get
            {
                return this._pageSize;
            }
        }

        [Description("       "), DefaultValue(0), Category("  ")]
        public int PageCount
        {
            get
            {
                return this.m_PageCount;
            }
        }

        [Description("         "), Category("  ")]
        public int RecordCount
        {
            set
            {
                this._recordCount = value;
            }
            get
            {
                return this._recordCount;
            }
        }

        [Description("       ,    1"), DefaultValue(0), Category("  ")]
        [Browsable(false)]
        public int PageIndex
        {
            set
            {
                this._pageIndex = value;
            }
            get
            {
                return this._pageIndex;
            }
        }

        ///  
        ///        
        ///      
        ///     
        /// 
        public void InitPageInfo(int recordCount, int pageSize)
        {
            this._recordCount = recordCount;
            this._pageSize = pageSize;
            this.InitPageInfo();
        }

        ///  
        ///        
        ///     
        /// 
        public void InitPageInfo(int recordCount)
        {
            this._recordCount = recordCount;
            this.InitPageInfo();
        }
        ///  
        ///        
        /// 
        public void InitPageInfo()
        {
            if (this._pageSize  this.m_PageCount)
            {
                this._pageIndex = this.m_PageCount;
            }
            if (this._pageIndex  1);
            this.btnPrevious.Enabled = enable;

            //          
            enable = (this.PageIndex > 1);
            this.btnFirst.Enabled = enable;

            //           
            enable = (this.PageIndex  1)
            {
                this.RefreshData(this._pageIndex - 1);
            }
            else
            {
                this.RefreshData(1);
            }
        }
        private void btnNext_Click(object sender, System.EventArgs e)
        {
            if (this._pageIndex  0 ? this.m_PageCount : 1);
        }

        private void txtPageIndex_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                int num;
                try
                {
                    num = Convert.ToInt16(this.txtPageIndex.Text);
                }
                catch
                {
                    num = 1;
                }

                if (num > this.m_PageCount)
                    num = this.m_PageCount;
                if (num  
  

, , ?

   , 。 , :


, ? 。

   Load Search() , :

private void Search()
{
    var recordCount = 0;            
    this.DTProductInfo = GetData(out recordCount, ucPager.PageIndex, ucPager.PageSize, this.searchValue);
    ucPager.RecordCount = recordCount;
    ucPager.InitPageInfo();
    //       
    this.GetList();
}

private DataTable GetData(out int recordCount, int pageIndex, int pageSize,string search)
{
    return new ProductInfoManager(dbProvider).GetDTByPage(out recordCount, pageIndex, pageSize, search,ProductInfoTable.FieldCreateOn + " DESC ");
}

public override void GetList()
{
    this.dgvProductInfo.AutoGenerateColumns = false;
    if (this.DTProductInfo.Columns.Count > 0)
    {
        this.DTProductInfo.DefaultView.Sort = ProductInfoTable.FieldCreateOn;
    }

    this.dgvProductInfo.DataSource = this.DTProductInfo.DefaultView;
    this.SetControlState();
}

にUcPagerExのPageChangedイベントを して、ユーザーのページングの を にする があります.コードは の りです.
private void ucPager_PageChanged(object sender, EventArgs e)
{
    var holdCursor = this.Cursor;
    this.Cursor = Cursors.WaitCursor;
    Search();
    this.Cursor = holdCursor;
}

: のGetDTByPageメソッドは に できます.ストレージ・プロシージャを び すことも、コードを してページングすることもできます. ページされたデータを すだけでいいです.
の に すように、ページ けの を します.
 
  : EricHu
Email: [email protected]
QQ   :406590790 
QQ :237326100
    : 【CSDN】
         【CNBLOGS】
    :     、         、DBA。           、         ,           ,              ,  DotNet,DB(SqlServer、Oracle )  。  Java、Delhpi Linux    ,        。     、                 。   DB     、WinForm、WCF、WebService、        ASP.NET     、  、     。
       ,     !
        CNBLOGS    ,    ,               ,                ,    ,       QQ    ,    。