DevExpress GridControl+UserControl實現分頁


        志向不過是記憶的奴隸,生氣勃勃地降生,但卻很難成長。

                                                                             —— 莎士比亞

        時隔一年,我寫隨筆真的很隨意,想起了就來博客園寫寫,想不起來就任由懶惰支配着我。不過我到覺得這不是什么壞事,你不用為了完成某事而讓自己過得很不自在,任性而為也並不是一件多么壞的事。言歸正傳,講講今天要記錄的是什么,一個簡單的功能,devexpress gridControl+自定義用戶控件(userControl)實現分頁效果,也許很多人覺得這是很簡單的功能,不值得來寫個博客。我寫博客不是為了造福大眾,只是為了能給自己留下痕跡,如果博文對您有作用,那我倍感欣慰。如果耽誤了您時間,跟我沒多大關系!哈哈。就是這么皮!

      開始正文,實現Grid分頁我們需要一個GridControl(devexpress)控件,有人會說,devexpress gridcontrol有自帶的分頁功能,確實有,但自帶的分頁滿足不了我們日常工作的需求,如果僅僅只是用自帶的功能,那我來寫博客真是耽誤自己時間,也耽誤您看的時間。首先我們看看效果,如下圖。 界面不是很好看,不要介意。畢竟不是美工出身。

     我們先建一個項目,添加一個winform,在form中添加如下控件。

上部分為devexpress的grid控件(這個我就不詳細說了,官方文檔,demo都很多),下部分為自定義用戶控件,后面我們會仔細講解如何創建用戶控件。

用戶控件

在項目中添加新建項,選擇用戶控件。如下圖

我是為了做分頁,所以在用戶控件在添加如下控件。

首頁:實現點擊首頁直接跳轉到第一頁。

上一頁:實現往回翻頁。

第[  ]頁:實現輸入頁碼,直接跳轉到所輸的頁碼。

下一頁:往下翻頁。

最后一頁:實現跳轉到最后一頁。

下拉框:實現一頁顯示多少條數據,我這里分別為30,60,90。

代碼】:注,只會把我認為比較重要的代碼貼下

定義分頁需要用到的變量。

1 private int allcount = 0;//總條數
2 private int pageSize = 30;//一頁顯示條數
3 private int curPage = 1;//當前頁
4 public delegate void GetPageDataEvents(int curPage,int pageSize);//定義委托
5 public event GetPageDataEvents williamPagerEvent;//定義事件

有的人可能會問,分頁為什么要定義委托?其實定義委托是為了能引用這個用戶控件的form中調用你用戶控件的一些功能。是為了讓我的用戶控件和其他form能夠交互

計算總頁數代碼

 public int GetPageCount()
 {
      int pageCount = 0;
      if (allcount % pageSize == 0)//取余為0
      {
          pageCount = allcount / pageSize;
       }
      else
      {
         pageCount = (allcount / pageSize) + 1;//不為0,所需頁數加1
       }
      return pageCount;
 }

【實現翻頁控件更新】

 

 public void RefreshPager(int pageSizeparam, int allCountparam,int curPageparam)
        {
            this.allcount = allCountparam;
            this.pageSize = pageSizeparam;
            this.curPage = curPageparam;

            this.btnpageinfobar.Font = new Font("宋體", 9, FontStyle.Regular);
            this.btnpageinfobar.TextM = string.Format("(共{0}條記錄,每頁{1}條,共{2}頁)",allcount,pageSize,GetPageCount());
            this.txtnumber.Text = curPage.ToString();
            this.cmbpageSize.Text = pageSize.ToString();
            if (curPage==0)
            {
                if (GetPageCount()>0)
                {
                    curPage = 1;
                    williamPagerEvent(curPage, pageSize);
                }
            }
            if (curPage>GetPageCount())
            {
                curPage = GetPageCount();//輸入頁碼大於總頁數,取最大頁數碼
 williamPagerEvent(curPage, pageSize);
            }
        }

 

刷新翻頁控件函數中調用事件的目的為了根據curpage和pageSize獲取數據源,填充grid

實現翻頁功能的幾個按鈕,事件我是做了下面的處理,第一感覺有點小小的封裝(面向對象思維模式,哈哈)。我們自己寫個Button按鈕事件。如下:

private void BtnEvents(object sender, EventArgs e)
{
            if (williamPagerEvent!=null)
            {
                Label btm = sender as Label;
                string btmTag = btm.Tag.ToString();
                if (btmTag == "first")//首頁按鈕單擊事件出發
                {
                    curPage = 1;
                    williamPagerEvent(curPage, pageSize);
                }
                if (btmTag == "prv")//上一頁按鈕單擊事件被觸發
                {
                    if (curPage==1)
                    {
                        return;
                    }
                    if (curPage <= GetPageCount())
                    {
                        curPage -= 1;
                        williamPagerEvent(curPage, pageSize);
                    }
                }
                if (btmTag=="next")
                {
                    if (curPage==GetPageCount())
                    {
                        return;
                    }
                    if (curPage < GetPageCount())
                    {
                        curPage += 1;
                        williamPagerEvent(curPage, pageSize);
                    }
                }
                if (btmTag=="last")
                {
                    curPage = GetPageCount();
                    williamPagerEvent(curPage, pageSize);
                }

            }
           
}

如上,我們把功能代碼集中到一起后,我們只需要在一個button的buttonclick事件中調用。然后其他button的buttonclick事件 就可以直接綁定已經調用功能代碼的buttonclick事件,即可。(你也可試試用其buttonclick事件直接綁定上面的功能函數,試試,我沒試過,可能是行得通的)

到這里,分頁控件的主要代碼就完成了。接下來我們看看如何調用這個分頁用戶控件。

1.當你的用戶控件編譯完成后,我們在vs的工具欄中會出現你的用戶控件。直接拖拽到你的form中。

2.在form的構造函數中實現我們用戶控件中定義的那個事件。

 public Form1()
{
            InitializeComponent();
            list = GetData();//測試數據源
            this.gridPage1.williamPagerEvent += GridPage1_williamPagerEvent;
            RefreshGrid();
            
            //this.gridControl1.DataSource = GetPageData(1,pageSize,listDataSource);
            //pageCount = GetPageCount(listDataSource.Count, pageSize);
            //SetPageInfo(pageIndex, pageCount);
 }  

3. GridPage1_williamPagerEvent中完成如下:

 public void RefreshGrid()
{
   FillGridByPage(curPage);
}

public void FillGridByPage(int curPage=1)
{
   this.gridControl1.DataSource = GetPageData(curPage,pageSizeU,list);//測試數據源
   this.gridControl1.MainView.PopulateColumns();
   this.gridPage1.RefreshPager(pageSizeU, list.Count, curPage);
}
private void GridPage1_williamPagerEvent(int curPage, int pageSize) { this.curPage = curPage; this.pageSizeU = pageSize; FillGridByPage(curPage); }

分頁功能完成。大吉大利,今晚吃雞……

 

 

 


免責聲明!

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



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