天天看点

C# 利用Datagridview、BindingNavigator、BindingSource自动显示数据

DataGridview是要进行显示的控件

BindingNavigator是导航控件,可以对Datagridview中的数据进行操作

BindingSource是数据源,用来绑定数据库或者表格

下边是图像化界面

C# 利用Datagridview、BindingNavigator、BindingSource自动显示数据

上边的导航键从红色X以前的按键无需进行编写代码,之后的要进行编写代码进行实现,后边的标签、多选框、文本框以及按钮都是从黄色+号衍生过来的,点击加号即可自行添加想要的东西。至于上边导航键中的属性名称,可以自行对应下边的代码中,亲测有效。

/// <summary>
        /// 系统列表导航键
        /// </summary>
        #region 
        /// <summary>
        /// 对?/总页数进行赋值(?)
        /// </summary>
        private void ComboBoxValue()
        {
            for (int i = 1; i < _pageCount + 1; i++)
            {
                txtCurrentPage.Items.Add(i);
            }
        }

        /// <summary>
        /// 每页显示记录数
        /// </summary>
        private int _pageSize = 100;
        /// <summary>
        /// 每页显示记录数
        /// </summary>
        public int PageSize
        {
            get { return _pageSize; }
            set { _pageSize = value; }
        }/// <summary>
         /// 总记录数
         /// </summary>
        private int _nMax = 0;
        /// <summary>
        /// 总记录数
        /// </summary>
        public int NMax
        {
            get { return _nMax; }
            set { _nMax = value; }
        }/// <summary>
         /// 页数=总记录数/每页显示记录数
         /// </summary>
        private int _pageCount = 0;
        /// <summary>
        /// 页数=总记录数/每页显示记录数
        /// </summary>
        public int PageCount
        {
            get { return _pageCount; }
            set { _pageCount = value; }
        }/// <summary>
         /// 当前页号
         /// </summary>
        private int _pageCurrent = 0;
        /// <summary>
        /// 当前页号
        /// </summary>
        public int PageCurrent
        {
            get { return _pageCurrent; }
            set { _pageCurrent = value; }
        }/// <summary>
         /// 当前记录行
         /// </summary>
        private int _nCurrent = 0;
        /// <summary>
        /// 当前记录行
        /// </summary>
        public int NCurrent
        {
            get { return _nCurrent; }
            set { _nCurrent = value; }
        }
        /// <summary>
        /// 设置数据源
        /// </summary>
        private DataTable dataSource = null;
        /// <summary>
        /// 设置数据源
        /// </summary>
        public DataTable DataSource
        {
            get { return dataSource; }
            set { dataSource = value; }
        }
        //private DataSet ds = null;

        public void InitDataSet(DataTable dt)
        {
            this.dataSource = dt;
            this._nMax = this.dataSource.Rows.Count;
            //计算总页数
            this._pageCount = _nMax / _pageSize;
            //
            if ((_nMax % _pageSize) > 0)
                _pageCount++;
            _pageCurrent = 1;
            _nCurrent = 0;
            FillData();
        }


        /// <summary>
        /// 填充数据
        /// </summary>
        private void FillData()
        {
            //当前页面开始记录行
            int nStartPos = 0;
            //当前页面结束记录行
            int nEndPos = 0;
            DataTable dtTemp = this.dataSource.Clone();
            if (this._pageCurrent == this._pageCount)
                nEndPos = _nMax;
            else
                nEndPos = this._pageCurrent * this._pageSize;

            nStartPos = this._nCurrent;

            lblMaxPage.Text = this._pageCount.ToString();//页数
            txtCurrentPage.Text = this._pageCurrent.ToString();//当前页

            for (int i = nStartPos; i < nEndPos; i++)
            {
                dtTemp.ImportRow(this.dataSource.Rows[i]);
                _nCurrent++;
            }
            bindingSource1.DataSource = dtTemp;//绑定数据源,管控TMSI表格
            dgvSoundResult.DataSource = bindingSource1;
            bindingNavigator1.BindingSource = bindingSource1;

        }
        /// <summary>
        /// 导航键
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>  
        private void bindingNavigator1_ItemClicked_1(object sender, ToolStripItemClickedEventArgs e)
        {
            switch (e.ClickedItem.Text)
            {
                case "移到上一条记录":
                    //FillData();
                    break;
                case "移到下一条记录":
                    //FillData();
                    break;
                case "上一页":
                    lblMsg1.Enabled = true;
                    if (this._pageCurrent == 1)
                    {
                        MessageBox.Show("已经是第一页,请点击“下一页”查看!");
                        // lblMsg.Text = "已经是第一页,请点击“下一页”查看!";
                        return;
                    }
                    else
                    {
                        _pageCurrent--;
                        this._nCurrent = this._pageSize * (_pageCurrent - 1);
                        FillData();
                    }

                    break;
                case "下一页":
                    lblMsg.Enabled = true;

                    if (this._pageCurrent == _pageCount)
                    {
                        lblMsg1.Enabled = false;
                        MessageBox.Show("已经是最后一页,请点击“上一页”查看!");
                        //lblMsg1.Text = "已经是最后一页,请点击“上一页”查看!";
                        return;
                    }
                    else
                    {
                        _pageCurrent++;
                        this._nCurrent = this._pageSize * (_pageCurrent - 1);
                        FillData();
                    }

                    break;
            }
        }
        /// <summary>
        /// 跳转
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButton10_Click(object sender, EventArgs e)
        {
            int num = 0;
            if (int.TryParse(txtCurrentPage.Text.Trim(), out num) && num > 0)
            {
                _nCurrent = (num - 1) * 100;
                _pageCurrent = num;
                FillData();
            }
        }
        /// <summary>
        /// 跳转页数限制
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtCurrentPage_TextChanged_1(object sender, EventArgs e)
        {
            int num = 0;
            if (int.TryParse(txtCurrentPage.Text.Trim(), out num) && num > 0)
            {
                if (num > _pageCount)
                {
                    txtCurrentPage.Text = _pageCount.ToString();
                }
            }
        }
        #endregion
           

      在想要进行显示时,只需要调用 public void InitDataSet(DataTable dt)这个方法即可,里边的参数是一张表,如果这张表是从数据库取出来的,则会省掉很多事。如果没有数据库,则要先在本地建立一张表,显示的字段初始化时要加载到datagridview中,这种从数据源取数据进行显示,不允许datagridview刚开始就把字段写死在首行,字段名是自行动态加载进来的,而且过程中不允许datagridview在代码中自动添加行,只能刷新数据表取数据。所以假如想要刚进入系统的时候,就看到字段显示在列表中,就必须初始化datagridview,代码如下,只是上述代码中的一部分即可实现功能。

/// <summary>
        /// 系统列表最开始进行初始化
        /// </summary>
        /// <param name="dt"></param>
        #region 
        public void InitData(DataTable dt)
        {
            this.dataSource = dt;
            this._nMax = this.dataSource.Rows.Count;
            //计算总页数
            this._pageCount = _nMax / _pageSize;
            //
            if ((_nMax % _pageSize) > 0)
                _pageCount++;
            _pageCurrent = 1;
            _nCurrent = 0;
            InitalFillData();
        }
        /// <summary>
        /// 填充数据
        /// </summary>
        private void InitalFillData()
        {
            //当前页面开始记录行
            int nStartPos = 0;
            //当前页面结束记录行
            int nEndPos = 0;
            DataTable dtTemp = this.dataSource.Clone();
            if (this._pageCurrent == this._pageCount)
                nEndPos = _nMax;
            else
                nEndPos = this._pageCurrent * this._pageSize;

            nStartPos = this._nCurrent;

            lblMaxPage.Text = this._pageCount.ToString();//页数
            txtCurrentPage.Text = this._pageCurrent.ToString();//当前页
            bindingSource1.DataSource = dtTemp;//
            dgvSoundResult.DataSource = bindingSource1;
            bindingNavigator1.BindingSource = bindingSource1;
        }
           

关于绑定数据源显示列表就先说到这里,欢迎大家批评指正。