惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
小众软件
小众软件
博客园 - 【当耐特】
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
Engineering at Meta
Engineering at Meta
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
H
Help Net Security
博客园_首页
P
Proofpoint News Feed
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
N
Netflix TechBlog - Medium
爱范儿
爱范儿
MyScale Blog
MyScale Blog
Blog — PlanetScale
Blog — PlanetScale
The Cloudflare Blog
MongoDB | Blog
MongoDB | Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Google DeepMind News
Google DeepMind News

博客园 - 喝咖啡就蒜瓣儿

通过六段代码理解join、wait、sleep、yield、endInvoke、Waitone的区别 JWT(JSON Web Tokens )简洁说明 通道、选区和蒙版:写给Ps初学者的参考 数据库中Schema(模式)概念的理解 怎样测试串口和串口线是否正常 DataTable如何删除特定行 Difference between WCF and Web API and WCF REST and Web Service C#创建带参数的线程 Application.DoEvents()和多线程 .NET Framework 工具 【转】实现Sqlite datediff日期时间相减的方法 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 如何让Advanced Installer卸载软件时保留一些文件 【转】SQLite提示database disk image is malformed的解决方法 【转】Winform下KeyDown,KeyPress,KeyUp事件的总结 【转】C# 子窗体如何调用父窗体的方法 C# WinForm自定义控件响应键盘事件 DataTable中如何去除重复的项【转】 TAG的用法和用途[转] Sqlite: unable to open database file
Devexpress GridView增加CheckBox列
喝咖啡就蒜瓣儿 · 2015-07-20 · via 博客园 - 喝咖啡就蒜瓣儿

参考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

        }