• winfrom dataGridView 自定义分页实现


    Winfrom 基本处于忘光的阶段.先需要做个winfrom 的软件.然后自己扩展了DataGridView带分页的控件。废话不多说 上图先  

    现在一步步实现其效果.

    1.添加用户控件 上图即可知道布局以及怎么实现

    2.代码如下

      #region 控件属性
    
            /// <summary>
            /// 页大小
            /// </summary>
            public int PageSize
            {
                get;
                set;
            }
            
            /// <summary>
            /// 总记录数
            /// </summary>
            public int DataSoureCount
            {
                get;
                set;
            }
    
            /// <summary>
            /// 总页数
            /// </summary>
            public int PageCount
            {
                get;
                set;
            } 
            
            /// <summary>
            /// 当前记录行
            /// </summary>
            public int CurrentPageIndex
            {
                get;
                set;
            }
    
            /// <summary>
            /// 取得或者设置数据控件的自定义列名
            /// </summary>
            public List<string> gdvColHeaderText
            {
                get;
                set;
            }
    
            /// <summary>
            /// 取得或者设置绑定控件的数据集
            /// </summary>
            public DataTable GetGridDataSoure
            {
                get;
                set;
            }
    
            /// <summary>
            /// 绑定数据到控件中
            /// </summary>
            public void DataBaind()
            {
                dgv.DataSource = GetGridDataSoure;
                lbSoureCount.Text = DataSoureCount.ToString();
                lbPageCount.Text = this.PageCount.ToString();
                lbPageSize.Text = this.PageSize.ToString();
                lbCurrentPageIndex.Text = this.CurrentPageIndex.ToString();
                DataGridViewStyle(dgv);
                if (gdvColHeaderText != null)
                {
                    for (int i = 0; i < gdvColHeaderText.Count; i++)
                    {
                        if (dgv.Columns.Count >= i)
                        {
                            dgv.Columns[i].HeaderText = gdvColHeaderText[i];
                        }
                    }
                }
    
                if (IsVisibleFirstCom)
                {
                    dgv.Columns[0].Visible = false;
                }
            }
            //新增一列填充空余单元格
            bool tc_column = true;
    
            /// <summary>
            /// DataGridView样式处理
            /// </summary>
            /// <param name="gridview">DataGridView控件</param>
            /// <param name="tc_column">是否需要添加列</param>
            public void DataGridViewStyle(DataGridView gridview)
            {
    
    
                System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
                System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
                dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;//211, 223, 240
                dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(223)))), ((int)(((byte)(240)))));
                dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                dataGridViewCellStyle2.ForeColor = System.Drawing.Color.Navy;
                dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
                dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
                gridview.AllowUserToAddRows = false;
               gridview.AllowUserToDeleteRows = false;
                dataGridViewCellStyle1.BackColor = System.Drawing.Color.LightCyan;
                Form f = new System.Windows.Forms.Form();
               gridview.AutoGenerateColumns = false;
    
    
                gridview.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2;
                gridview.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                gridview.EnableHeadersVisualStyles = false;
                gridview.GridColor = System.Drawing.SystemColors.GradientInactiveCaption;
                gridview.ReadOnly = true;
                //gridview.RowHeadersVisible = false;
                gridview.RowTemplate.Height = 28;
                gridview.RowTemplate.ReadOnly = false;
                //标题文字居中
                gridview.ColumnHeadersDefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
    
                //gridview.RowHeadersVisible = false;
                gridview.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
                gridview.ColumnHeadersHeight = 30;
    
                //设置选择单元模式
                gridview.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    
                if (tc_column)
                {
                    //设置默认填充列自动填充
                    DataGridViewTextBoxColumn TextBoxColumn = new DataGridViewTextBoxColumn();
                    TextBoxColumn.Name = "";
                    TextBoxColumn.HeaderText = "";
                    gridview.Columns.Insert(gridview.ColumnCount, TextBoxColumn);
                    TextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
                    //取消该列排序
                    TextBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
                    tc_column = false;
                }
    
                //点击立即进入编辑模式
                gridview.EditMode = DataGridViewEditMode.EditOnEnter;
            }
    
    
            #endregion
    
            #region 分页按钮事件
    
            /// <summary>
            /// 首页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnFirstPage_Click(object sender, EventArgs e)
            {
                this.CurrentPageIndex = 0;
                PageChange_Click(sender, e);
                //按钮状态
                btnFirstPage.Enabled = false;
                btnLastPage.Enabled = true;
                btnNextPage.Enabled = true;
                btnPrevPage.Enabled = false;
            }
    
            /// <summary>
            /// 上一页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnPrevPage_Click(object sender, EventArgs e)
            {
                if (this.CurrentPageIndex >= 2)
                {
                    btnPrevPage.Enabled = true;
                    btnLastPage.Enabled = true;
                    btnNextPage.Enabled = true;
                    btnPrevPage.Enabled = true;
                    this.CurrentPageIndex -= 1;
                    PageChange_Click(sender, e);
                }
                else
                {
                    btnPrevPage.Enabled = false;
                    btnFirstPage.Enabled = false;
                }
            }
    
            /// <summary>
            /// 下一页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnNextPage_Click(object sender, EventArgs e)
            {
                if (this.CurrentPageIndex < this.PageCount)
                {
                    btnFirstPage.Enabled = true;
                    btnLastPage.Enabled = true;
                    btnNextPage.Enabled = true;
                    btnPrevPage.Enabled = true;
                    this.CurrentPageIndex += 1;
                    PageChange_Click(sender, e);
                }
                else
                {
                    btnNextPage.Enabled = false;
                    btnLastPage.Enabled = false;
                }
            }
    
            /// <summary>
            /// 尾页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnLastPage_Click(object sender, EventArgs e)
            {
                if (this.CurrentPageIndex < this.PageCount)
                {
                    btnLastPage.Enabled = false;
                    this.CurrentPageIndex = PageCount;
                    PageChange_Click(sender, e);
                    btnFirstPage.Enabled = true;
                    btnNextPage.Enabled = false;
                    btnPrevPage.Enabled = true;
                }
                else
                {
                    btnLastPage.Enabled = false;
                    btnNextPage.Enabled = false;
                }
            }
    
    
            #endregion
    
            /// <summary>
            /// 页改变的事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            public delegate void PageChange();
    
            /// <summary>
            /// 页改变的委托事件
            /// </summary>
            public event EventHandler PageChange_Click;
    
            /// <summary>
            /// 点击行的事件
            /// </summary>
            public delegate void clickRow();
    
            /// <summary>
            /// 点击行的委托事件
            /// </summary>
            public event EventHandler dgvRows_Click;
    
            /// <summary>
            /// 单一值
            /// </summary>
            public string singleValue
            {
                get;
                set;
            }
    
            /// <summary>
            /// 多值
            /// </summary>
            public string manyValue
            {
                get;
                set;
            }
    
            /// <summary>
            /// 设置需要取的单一值
            /// </summary>
            public string setSingleValue
            {
                get;
                set;
            }
    
            /// <summary>
            /// 设置需要取的多值
            /// </summary>
            public string setManyValue
            {
                get;
                set;
            }
    
            /// <summary>
            /// 设置默认单元格选择行事件为单击 如果为单击则为ture 双击为false
            /// </summary>
            protected bool tableCheck
            {
                get 
                {
                    bool isSinlgOrDoubleClick=true;
                  ParameterModel tableCheckModel=new ParameterBLL().GetModelByID(100, "23");
                  if (tableCheckModel == null)
                      return isSinlgOrDoubleClick;
                  else
                  isSinlgOrDoubleClick=tableCheckModel.fParValue.ToUpper() == "Y" ? true : false;
                  return isSinlgOrDoubleClick;
                }
            }
    
            /// <summary>
            /// 双击单元格事件发生
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void dgv_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                //如果系统设置的为单击 则不促发双击
                if (tableCheck == true) return;
                if (e.RowIndex <= -1) return;
                if (!string.IsNullOrEmpty(setSingleValue))
                {
                    singleValue = dgv.Rows[e.RowIndex].Cells[setSingleValue].Value.ToString();
                }
                else
                {
                    string[] keyItem = setManyValue.Split(',');
                    string Values = string.Empty;
                    foreach (string s in keyItem)
                    {
                        Values += dgv.Rows[e.RowIndex].Cells[s].Value.ToString() + ",";
                    }
                    Values = Values.Remove(Values.LastIndexOf(','));
                    manyValue = Values;
                }
                dgvRows_Click(sender, e);
            }
    
            /// <summary>
            /// 是否隐藏首列的值
            /// </summary>
            public bool IsVisibleFirstCom
            {
                get;
                set;
            }
    
            /// <summary>
            /// 单击单元格事件发生
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                //如果系统设置的为双击 则不促发单击
                if (tableCheck == false) return;
                if (e.RowIndex <= -1) return;
                if (!string.IsNullOrEmpty(setSingleValue))
                {
                    singleValue = dgv.Rows[e.RowIndex].Cells[setSingleValue].Value.ToString();
                }
                else
                {
                    string[] keyItem = setManyValue.Split(',');
                    string Values = string.Empty;
                    foreach (string s in keyItem)
                    {
                        Values += dgv.Rows[e.RowIndex].Cells[s].Value.ToString() + ",";
                    }
                    manyValue = Values.Remove(Values.LastIndexOf(','));
                }
                dgvRows_Click(sender, e);
            }
    View Code

    3.如何使用

    在页面在拖入控件.填充数据如下

     string sqlWhere = " where 1=1 and fState in(0,1) ";
    
                if (!string.IsNullOrEmpty(txtArtNo.Text))
                {
                    sqlWhere += string.Format(" and fArtNo like '%{0}%'", txtArtNo.Text);
                }
                if (!string.IsNullOrEmpty(txtBarCode.Text))
                {
                    sqlWhere += string.Format(" and fBarCode like '%{0}%'", txtBarCode.Text);
                }
                if (!string.IsNullOrEmpty(txtItemName.Text))
                {
                    sqlWhere += string.Format(" and fItemName like '%{0}%'", txtItemName.Text);
                }
                if (ddlBigClassID.SelectedValue.ToString() != "-100")
                {
                    sqlWhere += string.Format(" and fBigClassID = '{0}'", ddlBigClassID.SelectedValue);
                }
                if (ddlMidClassID.SelectedValue != null && ddlMidClassID.SelectedValue .ToString()!= "-100")
                {
                    sqlWhere += string.Format(" and fMidClassID = '{0}'", ddlMidClassID.SelectedValue);
                }
                if (ddlSubClassID.SelectedValue != null && ddlSubClassID.SelectedValue.ToString() != "-100")
                {
                    sqlWhere += string.Format(" and fSubClassID = '{0}'", ddlSubClassID.SelectedValue);
                }
    
                ItemBaseBLL bll = new ItemBaseBLL();
                fgivItem.PageSize = 25;
                int CurrentPageIndex = fgivItem.CurrentPageIndex == 0 ? fgivItem.CurrentPageIndex += 1 : fgivItem.CurrentPageIndex += 0;
                fgivItem.CurrentPageIndex = CurrentPageIndex;
                fgivItem.GetGridDataSoure = bll.GetDateSoure(sqlWhere, "fItemID", "fItemID,fBigClassName,fMidClassName,fSubClassName,fItemName,fArtNo,fBarCode,fImportPrice,fSalePrice,fPrice1,fInVeryPrice,fCostPrice,fStateText", fgivItem.PageSize, fgivItem.CurrentPageIndex);
                int totalCount = bll.GetCount(sqlWhere);
                fgivItem.DataSoureCount = totalCount;
                int totalPageNum = (totalCount % fgivItem.PageSize) > 1 ? ((totalCount / fgivItem.PageSize) + 1) : (totalCount / fgivItem.PageSize);
                fgivItem.gdvColHeaderText = new List<string> {"商品编号", "商品大类", "商品中类", "商品小类", "商品名称", "商品货号", "商品条码", "进价", "售价", "活动价", "换购价", "成本价", "状态" };
                fgivItem.PageCount = totalPageNum;
                fgivItem.setSingleValue = "fItemID";
                fgivItem.IsVisibleFirstCom = true;
                fgivItem.DataBaind();
    View Code
  • 相关阅读:
    ios的自动转屏
    Acoustic Echo Cancellation (AEC) 回音消除技术探索
    springMVC之数据传递
    redis.conf 配置详解
    HDU 1880 字符串hash 入门题
    算法题: 求一个整数数组中,通过元素加减运算得到指定结果的所有运算过程. 例如【5,4,6,7,1】= 9 ?
    创建和使用SQL Server SSAS本地多维数据集
    yum局域网软件源搭建
    [置顶] 使用Android OpenGL ES 2.0绘图之六:响应触摸事件
    [置顶] Nosql笔记(一)——关系型数据库回顾
  • 原文地址:https://www.cnblogs.com/wjbobo/p/3135906.html
Copyright © 2020-2023  润新知