Winform分頁控件之純分頁顯示處理


在之前介紹的Winform分頁控件中,都以分頁控件+顯示表格控件作為一個整體性的控件,不可分開,這樣做的目的是可以實現更多的操作,集成更多豐富的特性,減少我們開發的工作量,這種情況雖然適用於大多數的情況,不過有時候需要更進一步對列表控件進行設置修改或者實現一些特殊的顯示效果的時候,這種綁定列表控件的分頁控件方式就有點捉襟見肘了。為了解決這個問題,我對分頁控件進行稍微的調整,使其支持分頁和列表控件分開的情況,具體實現以及效果是如何的呢,下面我們來分析了解下。

1、單獨的分頁信息控件

在我的開發設計過程總,實現一些關鍵的屬性及操作后,它就可以作為一個獨立的分頁控件進行使用了。

運行的時候效果如下所示:

2、分頁控件的使用

在實際使用的時候,我們把分頁控件的dll導入到工具欄里面,然后我們在VS的控件集合里面就可以看到它的圖標了。拖動到界面上就實現了分頁控件的布局顯示了。

由於這個純分頁沒有列表控件,這個列表就需要自己放到你的界面上去,由於列表控件如DataGridView(傳統控件)或者GridControl(DevExpress控件)是獨立的,因此可以自由設計調整,列表的樣式以及事件處理都合分頁控件沒有必然的聯系。

使用代碼如下所示:

       private void FrmCustomerPager_Load(object sender, EventArgs e)
        {
            this.pager1.PageChanged += new WHC.Pager.WinControl.PageChangedEventHandler(pager1_PageChanged);
            this.pager1.ExportCurrent += new WHC.Pager.WinControl.ExportCurrentEventHandler(pager1_ExportCurrent);
            this.pager1.ExportAll += new WHC.Pager.WinControl.ExportAllEventHandler(pager1_ExportAll);

            BindData();
        }

        void pager1_PageChanged(object sender, EventArgs e)
        {
            BindData();
        }

        void pager1_ExportCurrent(object sender, EventArgs e)
        {
            MessageUtil.ShowTips("導出當前頁");
        }

        void pager1_ExportAll(object sender, EventArgs e)
        {
            MessageUtil.ShowTips("導出所有");
        }        
        
        
        /// <summary>
        /// 標准的記錄查詢函數
        /// </summary>
        /// <param name="where"></param>
        /// <param name="pagerInfo"></param>
        /// <returns></returns>
        private DataTable FindToDataTable(string where, PagerInfo pagerInfo)
        {
            WHC.Pager.WinControl.PagerHelper helper = new WHC.Pager.WinControl.PagerHelper("All_Customer", "*", "LastUpdated", pagerInfo.PageSize, pagerInfo.CurrenetPageIndex, true, where);
            string countSql = helper.GetPagingSql(WHC.Pager.WinControl.DatabaseType.Access, true);
            string dataSql = helper.GetPagingSql(WHC.Pager.WinControl.DatabaseType.Access, false);

            string value = SqlValueList(countSql);
            pagerInfo.RecordCount = Convert.ToInt32(value);//為了顯示具體的信息,需要設置總記錄數

            DataTable dt = SqlTable(dataSql);
            return dt;
        }

        /// <summary>
        /// 根據查詢條件構造查詢語句
        /// </summary>
        /// <returns></returns>
        private string GetSearchSql()
        {
            SearchCondition condition = new SearchCondition();
            condition.AddCondition("Name", this.txtName.Text, SqlOperator.Like)
                .AddCondition("Type", this.cmbType.Text, SqlOperator.Like)
                .AddCondition("Area", this.cmbArea.Text, SqlOperator.Like);
            string where = condition.BuildConditionSql().Replace("Where", "");
            return where;
        }
        #endregion

        private void BindData()
        {
            string where = GetSearchSql();
            this.pager1.PageSize = 30;
            DataTable dt = FindToDataTable(where, this.pager1.PagerInfo);            
            this.gridControl1.DataSource = dt;
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            BindData();
        }

從上面的代碼,我們可以看到,使用起來還是很方便簡潔的,關鍵代碼就是下面這幾行:

       private void FrmCustomerPager_Load(object sender, EventArgs e)
        {
            this.pager1.PageChanged += new WHC.Pager.WinControl.PageChangedEventHandler(pager1_PageChanged);
            this.pager1.ExportCurrent += new WHC.Pager.WinControl.ExportCurrentEventHandler(pager1_ExportCurrent);
            this.pager1.ExportAll += new WHC.Pager.WinControl.ExportAllEventHandler(pager1_ExportAll);

            BindData();
        }

        private void BindData()
        {
            string where = GetSearchSql();
            this.pager1.PageSize = 30;
            DataTable dt = FindToDataTable(where, this.pager1.PagerInfo);            
            this.gridControl1.DataSource = dt;
        }

這樣獨立的純粹的分頁,給了列表展示控件最大的彈性,可以在一些復合列、復雜列表中提供很好的整合效果,彌補一些特殊分頁碰到的問題。

除了DevExpress樣式,還提供了傳統界面樣式、DotNetBar界面樣式幾種效果,如下所示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM