DataGridView 中添加CheckBox和常用处理方式

文章1 转载:http://blog.csdn.net/pinkey1987/article/details/5267934

DataGridView中添加CheckBox控件主要采用两种方法

1.  通过在DataGridView的Columns中添加System.Windows.Forms.DataGridViewCheckBoxColumn类型的列。并可以设置该列相关的属性信息。

2. 在程序代码中直接添加相应的代码

System.Windows.Forms.DataGridViewCheckBoxColumn Column1;
Column1 = new System.Windows.Forms.DataGridViewCheckBoxColumn();

Column1.HeaderText = "Column1";
Column1.Name = "Column1";
Column1.ReadOnly = false;

...

this.dgvRet.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {Column1});

也可以采用this.dgvRet.Columns.Add(Column1);进行更灵活的列添加。

在DataGridView绑定数据源后,可以通过设置DataGridViewCheckBoxColumn的DataPropertyName来确定影响CheckBox显示的数据源的属性和详细列名(具体如何影响可以由TrueValue、FalseValue和IndeterminateValue来设置)。也可以让数据源与添加的CheckBox无关联,在DataGridView中显示为不同的列。

DataGridView 中CheckBox的常用处理方法。

1.  如何设置CheckBox的值。

this.dgvRet.Rows[i].Cells[j].Value = false;

直接设置在DataGridView第(i+1)行第(j+1)列中CheckBox的Value的值。若Value的值为true,CheckBox 被勾上,若Value的值为false,CheckBox 不勾上。

2. CheckBox是否勾上的事件处理方法。

需要注意的是:在DataGridView中添加DataGridViewCheckBoxColumn,CheckBox是占有整个Cell方框的。在c#中默认情况下,CheckBox是否被单击和是否勾上没有必然的联系。可能你在点击Cell方框后,CheckBox的Value(是否勾上)不会发生变化(点在Cell中空白处)。

这种情况,我一般将CheckBox的Value值通过程序进行控制。不依赖于Visual Studio 2005自动完成。具体处理步骤如下:

1. 将DataGridViewCheckBoxColumn的ReadOnly属性设置为true。

2. 添加DataGridView的CellClick方法。

private void dgvRet_CellClick(object sender, DataGridViewCellEventArgs e)
        {

if (this.dgvRet.CurrentCell.ColumnIndex == 0)
            {
                //获取DataGridView中CheckBox的Cell
                DataGridViewCheckBoxCell dgvCheck = (DataGridViewCheckBoxCell)(this.dgvRet.Rows[this.dgvRet.CurrentCell.RowIndex].Cells[0]);

//获取被选中列的相关信息

Double dAdd = double.Parse(this.dgvRet.Rows[this.dgvRet.CurrentCell.RowIndex].Cells[5].Value.ToString());

...

//根据单击时,Cell的值进行处理。EditedFormattedValue和Value均可以

//若单击时,CheckBox没有被勾上
                if (Convert.ToBoolean(dgvCheck.EditedFormattedValue) == false)
                {
                    this.dTotal += dAdd;

...

//通过程序完成CheckBox是否勾上的控制
                    dgvCheck.Value = true;
                }

//若单击时,CheckBox已经被勾上
                else
                {
                    this.dTotal -= dAdd;

...

//通过程序完成CheckBox是否勾上的控制
                    dgvCheck.Value = false;
                }
              
                this.txtTotal.Text = this.dTotal.ToString();

}
        }

文章2   C# winfrom 中datagridview中checkbox的使用方法(转)

http://blog.sina.com.cn/s/blog_4e51b5530100j5yz.html

方法一:
private void dgv_zy_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
            int count = Convert.ToInt16(dgv_zy.Rows.Count.ToString());
            for (int i = 0; i < count; i++)
            {
                DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dgv_zy.Rows[i].Cells["cb_check"];
                Boolean flag = Convert.ToBoolean(checkCell.Value);
               if (flag == true)     //查找被选择的数据行
                {            
                    checkCell.Value = false;
                }
                else
                   continue;
            }
      }

}

获取选择的数据

int count = Convert.ToInt32(dgv_zy.Rows.Count.ToString());
          for (int i = 0; i < count; i++)
            {
                //如果DataGridView是可编辑的,将数据提交,否则处于编辑状态的行无法取到
             dgv_zy.EndEdit();
                DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dgv_zy.Rows[i].Cells["cb_check"];
               Boolean flag = Convert.ToBoolean(checkCell.Value);
                if (flag == true)     //查找被选择的数据行
               {
                   //从 DATAGRIDVIEW 中获取数据项
                string z_zcode = dgv_zy.Rows[i].Cells[0].Value.ToString().Trim();

}
            }

方法二:

如果需要在winform 的数据控件datagridview 中嵌入checkbox列 (  DataGridViewCheckBoxCell ),
在程序的执行中有可能需要像纯粹的checkbox控件的selectedindexchanged事件一样的事件来捕捉其状态的改变

我觉得比较好的方式是用datagridview 控件的cellcontentclick事件   例如:

如果嵌入的 DataGridViewCheckBoxCell 列在第一列,判断状态并添加处理事件可以为:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

if (e.ColumnIndex == 0 && e .RowIndex != -1)
            {

//获取控件的值

MessageBox.Show(this.dataGridView1.Rows[e.RowIndex].Cells[0].EditedFormattedValue.ToString());

//或者可以做其他事件处理程序

}

}

需要注意的是执行此事件是需要屏蔽其他datagridview单元格的cellcontentclick事件 ,即让除了 DataGridViewCheckBoxCell 列

之外的所有列的ReadOnly=True;

在获取datagridview中checkbox列的值得时候 一定要用 EditedFormattedValue属性,此属性获取的是编辑以后数值 而value 和

FormattedValue返回的往往是编辑以前的数值,而其重复单击的时候往往会出现错误(无法确定是编辑前还是编辑后的数值: 主要

原因是焦点问题,需要先移动焦点使datagridview获取更改后的数据在区获取他就没有问题了,所以以后用去获取数据前先要移出

datagridview中的焦点!!!),所以一定要用EditedFormattedValue来获取属性值

DataGridView 中添加CheckBox和常用处理方式 .的更多相关文章

  1. DataGridView中添加CheckBox列用于选择行

    DataGridView中添加CheckBox列用于选择行 1,编辑DataGridView,添加一列 CheckBox ,Name 赋值为 "select",如下图: 2,取消 ...

  2. Datagridview 添加checkbox列,并判断Datagridview 中的checkbox列是否被选中

    Solution1://In Fill DataGridViewEvent : DataGridViewCheckBoxColumn ChCol = new DataGridViewCheckBoxC ...

  3. 关于Winform下DataGridView中实现checkbox全选反选、同步列表项的处理

    近期接手一个winform 项目,虽然之前有.net 的经验,但是对一些控件的用法还不是很熟悉. 这段时间将会记录一些在工作中遇到的坎坷以及对应的解决办法,写出来与大家分享并希望大神提出更好解决方法来 ...

  4. DataGridView中实现checkbox全选的自定义控件

    在DataGridView中实现Checkbox的全选的方法就是在列头画一个checkbox, 并给其一个事件. 这个之前很多blog都有写, 这里就不多废话了,  codeproject上面有示例代 ...

  5. datagridview中使用checkbox问题。

    如果套用datagridview中的checkboxfield,生成的数据,会出现无法选择datagridview中数据项的问题,即checkbox不可以被鼠标点击,选中/取消选中.此checkbox ...

  6. 在datagridview中添加button按钮

    .Net的DataGridView控件中,提供了一种列的类型,叫 DataGridViewButtonColumn ,这种列类型是展示为一个 按钮,可以给button赋予相应的text,并且,此but ...

  7. WPF ListBoxItem模板中添加CheckBox选中问题

    原文:WPF ListBoxItem模板中添加CheckBox选中问题 是这样的,需要一个ListBox来展示照片,并添加一个选中的CheckBox.这就需要对ListBox的ItemTemplate ...

  8. 在Datagridview中添加datagridviewComboBox列并显示下拉列表

    在DataGridView中自动的添加Column. private void button_autoAddColumn_Click(object sender, EventArgs e) { try ...

  9. Jquery动态在td中添加checkbox

    如图:想要在这个id为headId的<td>中,用jquery动态添加checkbox 代码如下 : data是我用ajax 从后台获取的数据,里面含有若干个user类,我想把所有的人名字 ...

随机推荐

  1. C和C++混合编程(__cplusplus 与 external "c" 的使用)

    转自:http://blog.csdn.net/ljfth/article/details/3965871 第一种理解比如说你用C++开发了一个DLL库,为了能够让C语言也能够调用你的DLL输出(Ex ...

  2. Spring之ResourceLoader加载资源

    Resource与ResourceLoader对比 1.Resource接口定义了应用访问底层资源的能力. 通过FileSystemResource以文件系统绝对路径的方式进行访问: 通过ClassP ...

  3. 同一天的时间差,显示为HHMMSS和指定日期时间部分

    //1.hhmmss private String setGoodsDisBalance(Date startTime,Date endTime){ //时间差:毫秒ms long diff = en ...

  4. 模板模式与策略模式/template模式与strategy模式/行为型模式

    模板模式 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...

  5. WebStorm中将Project分享到GitHub时报“Error Running Git”错误的解决办法

    错误信息 Cannot run program "git.exe":CreateProcess error=2,系统找不到指定的文件. 解决办法 从错误信息就可以知道,WebSto ...

  6. LoadRunner关联之学习笔记

    去银行办业务,进银行的门,大堂经理给你一张业务号,拿着这张业务号,去柜台办理业务.--录制下来 第二天又去银行,还是拿着这张业务号,去柜台办理业务,柜员就不理你了,因为这张业务号是昨天的.--回放过程 ...

  7. Redis的几个认识误区

    此文作者是新浪微博平台架构师杨卫华timyang大师,是他对Redis研究的一个总结,澄清了一些认识上的误区,值得一读. James Hamilton在On Designing and Deployi ...

  8. 用js完成毫秒格式数据的日期格式化任务

    后台传过来的数据  creationTime  在后台是Date类型的 毫秒转换成  05-24  月 日格式的 //获得月日得到日期oTime function getMoth(str){ var  ...

  9. hdu1003 dp

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1003 #include<cstdio> #include<algorit ...

  10. Java基础语法的学习

    首先就是关于枚举类型的思考与实践,这个是在jdk5.0及以后的版本才有的,然后对枚举类型进行动手操作. 源代码: package test; public class EnumTest { publi ...