DataGridView 中添加CheckBox和常用处理方式 .
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和常用处理方式 .的更多相关文章
- DataGridView中添加CheckBox列用于选择行
DataGridView中添加CheckBox列用于选择行 1,编辑DataGridView,添加一列 CheckBox ,Name 赋值为 "select",如下图: 2,取消 ...
- Datagridview 添加checkbox列,并判断Datagridview 中的checkbox列是否被选中
Solution1://In Fill DataGridViewEvent : DataGridViewCheckBoxColumn ChCol = new DataGridViewCheckBoxC ...
- 关于Winform下DataGridView中实现checkbox全选反选、同步列表项的处理
近期接手一个winform 项目,虽然之前有.net 的经验,但是对一些控件的用法还不是很熟悉. 这段时间将会记录一些在工作中遇到的坎坷以及对应的解决办法,写出来与大家分享并希望大神提出更好解决方法来 ...
- DataGridView中实现checkbox全选的自定义控件
在DataGridView中实现Checkbox的全选的方法就是在列头画一个checkbox, 并给其一个事件. 这个之前很多blog都有写, 这里就不多废话了, codeproject上面有示例代 ...
- datagridview中使用checkbox问题。
如果套用datagridview中的checkboxfield,生成的数据,会出现无法选择datagridview中数据项的问题,即checkbox不可以被鼠标点击,选中/取消选中.此checkbox ...
- 在datagridview中添加button按钮
.Net的DataGridView控件中,提供了一种列的类型,叫 DataGridViewButtonColumn ,这种列类型是展示为一个 按钮,可以给button赋予相应的text,并且,此but ...
- WPF ListBoxItem模板中添加CheckBox选中问题
原文:WPF ListBoxItem模板中添加CheckBox选中问题 是这样的,需要一个ListBox来展示照片,并添加一个选中的CheckBox.这就需要对ListBox的ItemTemplate ...
- 在Datagridview中添加datagridviewComboBox列并显示下拉列表
在DataGridView中自动的添加Column. private void button_autoAddColumn_Click(object sender, EventArgs e) { try ...
- Jquery动态在td中添加checkbox
如图:想要在这个id为headId的<td>中,用jquery动态添加checkbox 代码如下 : data是我用ajax 从后台获取的数据,里面含有若干个user类,我想把所有的人名字 ...
随机推荐
- VS2015 Preview Secondary Installer 离线安装
VS2015 Preview Secondary Installer 离线安装 天朝的原因orz, 装过vs2015 preview 的人都懂的,第二阶段安装会失败.假公济私的研究了下VS2015,摸 ...
- ORA-03113:通信通道的文件结尾解决
今天跟往常一样,登陆PL/SQL,确登陆失败,出现一个错误“ORA-01034”和“ORA-27101”如图: 然后就就通过命令提示符去登陆Oracle,去查看怎么回事,然后问题进一步出现,错误“OR ...
- android 相对布局里面的一些属性
一. 有关于RelativeLayout布局的一些属性 1. 相对于兄弟控件的位置:android:layout_below Android:layout_toLeftof Android:la ...
- 解决因为I_JOB_NEXT问题导致job执行不正常,不停生成trace文件问题
今天同事说有个项目生产环境的目录老是满.查看了一下bdump目录,发现确实是平均1分钟生成一个8M左右的trace文件.查询了一下alert日志,发现是个job的报错引起的.具体查看了一下trace文 ...
- 时间编程,王明学learn
时间编程 一.时间类型 Coordinated Universal Time(UTC):世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT) Calend ...
- CoreLocation 下的定位跟踪测速
#import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewCont ...
- 开发Portlet第三步:如何在Crystal Portlet中调用远程服务?
当基于测试数据的Portlet调试完成后,接下来就是引入远程服务,替换测试数据. (此处以Dubbo框架远程服务为例) 分步指南 删除测试数据依赖:在pom.xml文件中,删除对****-servic ...
- Liferay 6.2 改造系列之八:修改默认安装的Portlet项目War包
Liferay默认在Tomcat.Jetty等服务器情况下,自动安装marketplace-portlet-6.2.0.1.war包,实现应用商店的自动部署,一般不需要应用商店,故删除以下包即可: / ...
- SU Demos-05Sorting Traces-02Demos
运行结果: 不足之处,欢迎批评指正.
- I Hate It(线段树基础)
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...