我的目的是在BindingNavigator中新增分頁的功能,有首頁、上頁、下頁、末頁四項,用PageChanged事件處理翻頁
以下為代碼:
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Drawing;
using System.Windows.Forms;namespace Uni.Component
{
    public delegate void NPageChangedEventHandler(object sender, EventArgs e);
    public partial class clsNavigaoter : BindingNavigator
    {
        private ToolStripButton bindingNavigatorQuery;
        private ToolStripSeparator bindingNavigatorSeparator1;
        private ToolStripButton bindingNavigatorFirstItem;
        private ToolStripButton bindingNavigatorPreviousItem;
        private ToolStripButton bindingNavigatorNextItem;
        private ToolStripButton bindingNavigatorLastItem;
        private ToolStripSeparator bindingNavigatorSeparator2;        public event NPageChangedEventHandler PageChanged;
        private int _pageSize;
        private int _pageCount;
        private int _recordCount;
        private int _currentPage;        public clsNavigaoter()
        {
            InitializeComponent();            GetBindingNavigatorItem();            this._pageSize = 10;
            this._recordCount = 0;
            this._currentPage = 1;//默認為第一頁
            this.InitPageInfo();
        }        public clsNavigaoter(int recordCount, int pageSize)
        {
            InitializeComponent();            GetBindingNavigatorItem();            this._pageSize = pageSize;
            this._recordCount = recordCount;
            this._currentPage = 1;
            this.InitPageInfo();
        }        protected virtual void OnPageChanged(EventArgs e)
        {
            if (PageChanged != null)
            {
                PageChanged(this, e);
            }
        }
        /// <summary>
        /// 設置或獲取每頁記錄數
        /// </summary>
        public int PageSize
        {
            set { this._pageSize = value; }
            get { return this._pageSize; }
        }
        /// <summary>
        /// 獲取記錄總頁數
        /// </summary>
        public int PageCount
        {
            get { return this._pageCount; }
        }
        /// <summary>
        /// 獲取或設置記錄總數
        /// </summary>
        public int RecordCount
        {
            set { this._recordCount = value; }
            get { return _recordCount; }
        }
        /// <summary>
        /// 獲取或設置當前頁
        /// </summary>
        public int CurrentPage
        {
            set { this._currentPage = value; }
            get { return this._currentPage; }
        }
        /// <summary>
        /// 初始化分頁信息
        /// </summary>
        /// <param name="recordCount">每頁記錄數</param>
        /// <param name="pageSize">總記錄數</param>
        public void InitPageInfo(int recordCount, int pageSize)
        {
            this._recordCount = recordCount;
            this._pageSize = pageSize;
            this.InitPageInfo();
        }
        /// <summary>
        /// 獲取分頁信息
        /// </summary>
        /// <param name="recordCount">總記錄數</param>
        public void InitPageInfo(int recordCount)
        {
            this._recordCount = recordCount;
            this.InitPageInfo();
        }
        /// <summary>
        /// 獲取分頁信息
        /// </summary>
        public void InitPageInfo()
        {
            if (this._pageSize < 1)
                this._pageSize = 10; //如果每页记录数不正确,即更改为10
            if (this._recordCount < 0)
                this._recordCount = 0; //如果记录总数不正确,即更改为0
            //取得总页数
            if (this._recordCount % this._pageSize == 0)
                this._pageCount = this._recordCount / this._pageSize;
            else
                this._pageCount = this._recordCount / this._pageSize + 1;
            //设置当前页
            if (this._currentPage > this._pageCount)
                this._currentPage = this._pageCount;
            if (this._currentPage < 1)
                this._currentPage = 1;            //this.txtCurrentPage.Text = this._currentPage.ToString();
            //this.label1.Text = "/{" + this._pageCount + "}";
        }        public void RefreshData(int page)
        {
            //this._currentPage = page;
            //this.txtCurrentPage.Text = this._currentPage.ToString();
            EventArgs e = new EventArgs();
            OnPageChanged(e);
        }        void bindingNavigatorLastItem_Click(object sender, EventArgs e)
        {
            if (this._pageCount > 0)
                this.RefreshData(this._pageCount);
            else
                this.RefreshData(1);
        }        void bindingNavigatorPreviousItem_Click(object sender, EventArgs e)
        {
            if (this._currentPage > 1)
                this.RefreshData(this._currentPage - 1);
            else
                this.RefreshData(1);
        }        void bindingNavigatorNextItem_Click(object sender, EventArgs e)
        {
            if (this._currentPage < this._pageCount)
                this.RefreshData(this._currentPage + 1);
            else if (this._pageCount < 1)
                this.RefreshData(1);
            else
                this.RefreshData(this._pageCount);
        }        void bindingNavigatorFirstItem_Click(object sender, EventArgs e)
        {
            this.RefreshData(1);
        }        /// <summary>
        /// 新增上頁,下頁
        /// </summary>
        private void GetBindingNavigatorItem()
        {
            this.Items.Clear();            bindingNavigatorQuery = new ToolStripButton();
            bindingNavigatorQuery.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            bindingNavigatorQuery.Image = ((Image)(Properties.Resources.ResourceManager.GetObject("30.bmp")));
            bindingNavigatorQuery.Name = "bindingNavigatorQuery";
            bindingNavigatorQuery.RightToLeftAutoMirrorImage = true;
            bindingNavigatorQuery.Size = new System.Drawing.Size(23, 22);
            bindingNavigatorQuery.ToolTipText = "查詢";            bindingNavigatorSeparator1 = new ToolStripSeparator();
            bindingNavigatorSeparator1.Name = "bindingNavigatorSeparator1";
            bindingNavigatorSeparator1.Size = new System.Drawing.Size(6, 25);            bindingNavigatorFirstItem = new ToolStripButton();
            bindingNavigatorFirstItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            bindingNavigatorFirstItem.Image = ((Image)(Properties.Resources.ResourceManager.GetObject("30.bmp")));
            bindingNavigatorFirstItem.Name = "bindingNavigatorFirstItem";
            bindingNavigatorFirstItem.RightToLeftAutoMirrorImage = true;
            bindingNavigatorFirstItem.Size = new System.Drawing.Size(23, 22);
            bindingNavigatorFirstItem.ToolTipText = "首頁";
            bindingNavigatorFirstItem.Click += new EventHandler(bindingNavigatorFirstItem_Click);
            bindingNavigatorPreviousItem = new ToolStripButton();
            bindingNavigatorPreviousItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            bindingNavigatorPreviousItem.Image = (Image)Properties.Resources.ResourceManager.GetObject("28.bmp");
            bindingNavigatorPreviousItem.Name = "bindingNavigatorPreviousItem";
            bindingNavigatorPreviousItem.RightToLeftAutoMirrorImage = true;
            bindingNavigatorPreviousItem.Size = new System.Drawing.Size(23, 22);
            bindingNavigatorPreviousItem.ToolTipText = "上頁";
            bindingNavigatorPreviousItem.Click += new EventHandler(bindingNavigatorPreviousItem_Click);            bindingNavigatorNextItem = new ToolStripButton();
            bindingNavigatorNextItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            bindingNavigatorNextItem.Image = (Image)Properties.Resources.ResourceManager.GetObject("29.bmp");
            bindingNavigatorNextItem.Name = "bindingNavigatorNextItem";
            bindingNavigatorNextItem.RightToLeftAutoMirrorImage = true;
            bindingNavigatorNextItem.Size = new System.Drawing.Size(23, 22);
            bindingNavigatorNextItem.ToolTipText = "下頁";
            bindingNavigatorNextItem.Click += new EventHandler(bindingNavigatorNextItem_Click);            bindingNavigatorLastItem = new ToolStripButton();
            bindingNavigatorLastItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
            bindingNavigatorLastItem.Image = (Image)Properties.Resources.ResourceManager.GetObject("31.bmp");
            bindingNavigatorLastItem.Name = "bindingNavigatorLastItem";
            bindingNavigatorLastItem.RightToLeftAutoMirrorImage = true;
            bindingNavigatorLastItem.Size = new System.Drawing.Size(23, 22);
            bindingNavigatorLastItem.ToolTipText = "末頁";
            bindingNavigatorLastItem.Click += new EventHandler(bindingNavigatorLastItem_Click);            bindingNavigatorSeparator2 = new ToolStripSeparator();
            bindingNavigatorSeparator2.Name = "bindingNavigatorSeparator2";
            bindingNavigatorSeparator2.Size = new System.Drawing.Size(6, 25);            this.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { bindingNavigatorQuery, bindingNavigatorSeparator1, bindingNavigatorFirstItem, bindingNavigatorPreviousItem, bindingNavigatorNextItem, bindingNavigatorLastItem, bindingNavigatorSeparator2 });
        }    }
}
出現的問題是新增的頁面按鈕會重復出現2次,而且又沒有圖標。找了很久沒找到BUG,請各位幫忙看看。謝謝

解决方案 »

  1.   

    PageChanged事件也不反應,客戶端代碼為:int recordCount = Convert.ToInt32(inv.GetInvmbTotalCount(dbName, searchSql).Tables[0].Rows[0][INVMBData.TOTALCOUNT_FIELD]);
                        //ds = item.GetDatasBy2(dbName, pageSplit1.PageSize, pageSplit1.CurrentPage, searchSql);
                        this.clsNavigaoter1.CurrentPage = 1;
                        this.clsNavigaoter1.InitPageInfo(recordCount, 10);        private void clsNavigaoter1_PageChanged(object sender, EventArgs e)
            {
                int m = clsNavigaoter1.CurrentPage;
                ds = item.GetDatasBy2(dbName,clsNavigaoter1.PageSize, clsNavigaoter1.CurrentPage, searchSql);            this.bindingSource1.DataSource = ds.Tables[0];
                this.clsDataGridView1.DataSource = bindingSource1;
                this.tabControl1.SelectedIndex = 2;
            }
      

  2.   

    没看到你对clsNavigaoter1_PageChanged事件进行订阅的语句。就是那个带有 +=的语句
      

  3.   

    也没有看到重载clsNavigaoter1_PageChanged
      

  4.   

    我是通過拖控件到WinForm中的。其代碼在Designer.cs中
    this.clsNavigaoter1.PageChanged += new Uni.Component.NPageChangedEventHandler(this.clsNavigaoter1_PageChanged);
                
      

  5.   

    搞定了 把这个去掉就好
      this.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { bindingNavigatorQuery, bindingNavigatorSeparator1, bindingNavigatorFirstItem, bindingNavigatorPreviousItem, bindingNavigatorNextItem, bindingNavigatorLastItem, bindingNavigatorSeparator2 });