Devexpress GridView增加CheckBox列

参考DEV官网代码做了一个增加checkbox列效果:

 #region 方法:设置GridView数据绑定
        public void GridDataBind()
        {
            dt = dbHelper.Fill(cmdStr);                     // 填充DataTable
            dt.Columns.Add("Check", typeof(bool));  // 增加个CheckBox列
            dt.Columns["Check"].SetOrdinal(0);       // 设置选择列的位置
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                dt.Rows[i]["Check"] = false;
            }
            gridControl1.DataSource = dt;
            gridView1.Columns["Check"].Width = 22;
            gridView1.Columns["Check"].OptionsColumn.ShowCaption = false;
            gridView1.Columns["Check"].OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
        }
  #endregion   

===================================================================================

#region GridView增加CheckBox列相关代码

        protected void DrawCheckBox(Graphics g, Rectangle r, bool Checked)

        {

            DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo info;

            DevExpress.XtraEditors.Drawing.CheckEditPainter painter;

            DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs args;

            info = chkEdit.CreateViewInfo() as DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo;

            painter = chkEdit.CreatePainter() as DevExpress.XtraEditors.Drawing.CheckEditPainter;

            info.EditValue = Checked; 

            info.Bounds = r;

            info.PaintAppearance.ForeColor = Color.Black;

            info.CalcViewInfo(g);

            args = new DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs(info, new DevExpress.Utils.Drawing.GraphicsCache(g), r);

            painter.Draw(args);

            args.Cache.Dispose();

        }

        private void gridView_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
        {
            e.Appearance.TextOptions.HAlignment = HorzAlignment.Far;
            if (e.Info.IsRowIndicator)
            {
                if (e.RowHandle >= 0)
                {
                    e.Info.DisplayText = (e.RowHandle + 1).ToString(CultureInfo.InvariantCulture);
                }
                else if (e.RowHandle < 0 && e.RowHandle > -1000)
                {
                    e.Info.Appearance.BackColor = Color.AntiqueWhite;
                    e.Info.DisplayText = "G" + e.RowHandle;
                }
            }
        }

        private void gridView_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)

        {

            if (e.Column == (sender as GridView).Columns["Check"])

            {

                e.Info.InnerElements.Clear();

                e.Info.Appearance.ForeColor = Color.Blue;

                e.Painter.DrawObject(e.Info);

                DrawCheckBox(e.Graphics, e.Bounds, GetCheckedCount() == gridView1.DataRowCount);

                //DrawCheckBox(e.Graphics, e.Bounds, false);

                e.Handled = true;

            }

        }       

 

        private void gridView_MouseUp(object sender, MouseEventArgs e)

        {

            if (e.Clicks == 1 && e.Button == MouseButtons.Left)

            {

                GridHitInfo gridHitInfo;

                Point point = gridView1.GridControl.PointToClient(Control.MousePosition);

                gridHitInfo = gridView1.CalcHitInfo(point);

 

                if (gridHitInfo.InColumn && gridHitInfo.Column.FieldName == "Check")

                {

                    if (GetCheckedCount() == gridView1.DataRowCount)

                    {

                        UnCheckAll();

                    }

                    else

                    {

                        CheckAll();

                    }

                }

 

                if (gridHitInfo.InRow && gridHitInfo.InRowCell == true)

                {

                    if (Convert.ToBoolean(gridView1.GetFocusedRowCellValue("Check")) == false)

                    {

                        CheckSingle();

                    }

                    else

                    {

                        UnCheckSingle();

                    }

                }

            }

        }

 

        private int GetCheckedCount() // 获取到已选择的数量

        {

            int count = 0;

            for (int i = 0; i < gridView1.DataRowCount; i++)

            {

                if ((bool)gridView1.GetRowCellValue(i, gridView1.Columns["Check"]) == true)

                {

                    count++;

                }

            }

            return count;

        }

 

        private void CheckAll() // 选择全部

        {

            for (int i = 0; i < gridView1.DataRowCount; i++)

            {

                gridView1.SetRowCellValue(i, gridView1.Columns["Check"], true); 

            }

        }

 

        private void UnCheckAll() // 反选全部

        {

            for (int i = 0; i < gridView1.DataRowCount; i++)

            {

                gridView1.SetRowCellValue(i, gridView1.Columns["Check"], false);

            }

        }

 

        private void CheckSingle() // 选择一个

        {

            gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["Check"], true);

        }

 

        private void UnCheckSingle() // 反选一个

        {

            gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns["Check"], false);

        }

  #endregion       

======================================================================

在窗体加载事件里的代码:   

  private void MainForm_Load(object sender, EventArgs e)

        {

            #region 从本地数据库中获取数据 并展示到gridView控件上

                GridDataBind();

            #endregion

 

            #region 设置gridview列只读(不能编辑)

            for (int i = 1; i < gridView1.Columns.Count; i++)

            {

                gridView1.Columns[i].OptionsColumn.ReadOnly = true;

            }

            #endregion

        }

 

转载于:https://www.cnblogs.com/netlyf/p/4660840.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值