关于Winform下DataGridView中实现checkbox全选反选、同步列表项的处理
近期接手一个winform 项目,虽然之前有.net 的经验,但是对一些控件的用法还不是很熟悉。 这段时间将会记录一些在工作中遇到的坎坷以及对应的解决办法,写出来与大家分享并希望大神提出更好解决方法来促进进步。 我也会尽可能把我查找到资料的出处引出来,以此来感恩对我提供帮助的人们。
正题如下
一、关于Winform下DataGridView中实现checkbox全选反选、同步列表项的处理
1.checkbox的添加:在设计页面选择编辑列在新添加的列中注意如下几个属性:

SortMode = NotSortable :禁止排序,点击表头进行全选/反选时 和排序事件是无关的,虽然不会有质的影响,但是我还是禁止了
ColumnType = DataGridViewCheckBoxColumn:这就是核心点了 设置列的属性为复选框
DataPropertyName = iChecked : 这个又是一个建议的选择,最好有字段与之对应,这样开发起来更加方便
HeaderText = □:这是我一个投机取巧的方式,如果在表头添加复选框对后续的开发带来很多麻烦,所以这里用□代表反选 √代表全选
2.DataGridView相关属性的设置:
//使显示的列和空间中设定的列一致,否则会按照dataTable中的列显示
dgv.AutoGenerateColumns = false;
//不添加此语句 会多出一列
dgv.AllowUserToAddRows = false;
3.全选/反选核心代码
添加ColumnHeaderMouseClick 事件
核心代码如下
if (e.ColumnIndex == 0)
{
dgv.ClearSelection();
dgv.CurrentCell = dgv[1, 0];//如果没有这句代码,如果复选框列有某个单元格获得焦点时,虽然全选,但是此单元格依然不能选中 这句话的意思就是把焦点移出去
if (ck.HeaderText == "□")
{
for (int i = 0; i < dgv.RowCount; i++)
{
dgv.Rows[i].Cells[0].Value = true;
}
ck.HeaderText = "√";
}
else
{
for (int i = 0; i < dgv.RowCount; i++)
{
dgv.Rows[i].Cells[0].Value = false;
}
ck.HeaderText = "□";
}
}
4.列表中的复选框处罚表头的改变处理方式及核心代码
添加CellContentClick事件 至于为什么添加这个事件,网上有很多文章描述,我不必在此细说
if (e.ColumnIndex == 0 && e.RowIndex != -1)
{
int sum = 0;
for (int i = 0; i < dgv.RowCount; i++)
{
//必须使用这个属性 EditedFormattedValue 这个属性也是关键 这里不用value是因为不是实时的数据 网上更多详细资料如果想深入研究可以自己查资料
if ((bool)dgv.Rows[i].Cells[0].EditedFormattedValue)
{
sum++;
}
}
if (sum == dgv.RowCount)
{
ck.HeaderText = "√";
}
else
{
ck.HeaderText = "□";
}
}
相关参考文章:
https://www.cnblogs.com/emanlee/archive/2009/07/21/1528074.html
https://www.cnblogs.com/chaobaojun/archive/2010/05/13/1734509.html
关于Winform下DataGridView中实现checkbox全选反选、同步列表项的处理的更多相关文章
- DataGridView中实现checkbox全选的自定义控件
在DataGridView中实现Checkbox的全选的方法就是在列头画一个checkbox, 并给其一个事件. 这个之前很多blog都有写, 这里就不多废话了, codeproject上面有示例代 ...
- C# WinForm中实现CheckBox全选反选功能
今天一群里有人问到这个功能,其实应该挺简单,但提问题的人问题的出发点并没有描述清楚.因此,一个简简单单的需求,就引起了群内热烈的讨论.下面看看这个功能如何去实现,先上效果: 下面直接上代码,请不要在意 ...
- 表单javascript checkbox全选 反选 全不选
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- vue中的checkbox全选和反选
前几天有个博客园的朋友问小颖,小颖之前写的vue2.0在table中实现全选和反选 .Vue.js实现checkbox的全选和反选,为什么他将里面的js复制下来,但是实现不了全选和反选.小颖当时看他 ...
- jquery、js操作checkbox全选反选
全选反选checkbox在实际应用中比较常见,本文有个不错的示例,大家可以参考下 操作checkbox,全选反选//全选 function checkAll() { $('input[name=&qu ...
- Jquery 1.8全选反选删除选中项实现
JQuery1.6以后,Prop的出现,让1.6以下的全选反选效果全部失效了.以下是修正后的版本: 全选反选效果: $(".checkbox").click(function () ...
- datagridview里面的checkbox全选和取消全选
全选 设置全选button,选中所有的checkbox private void selectAll_Click(object sender, EventArgs e) { //遍历datagridv ...
- jQuery实现checkbox全选反选及删除等操作
1.list.html 说明:用checkbox数组Check[]存放每一行的ID值 <div id="con"> <table width="100% ...
- checkbox 全选反选实现全代码
//跳转到指定action function validateForm(url){ if($("#form").form('validate')){ var x=document. ...
随机推荐
- Https如何确保传输安全的
1.对称加密算法 加密和解密算法是公开的,那个密钥是保密的, 只有双方才知道, 这样生成的加密消息(密文) 别人就无法得知了. 2.非对称加密算法 RSA算法非常有意思,是有一对儿钥匙, 一个是保密的 ...
- React中使用CSS
第一种: 在组件中直接使用style 不需要组件从外部引入css文件,直接在组件中书写. import React, { Component } from "react"; con ...
- android模拟器不能上网设置
进行sdk目录中的platform-tools目录: adb devices 系统会罗列出所有设置 adb -s emulator- shell 最后设置网关 setprop net.dns1 192 ...
- servlet 高级知识之Listener
Listener,顾名思义,监听器.它可以监听客户端的请求.服务端的操作等. 通过监听器,可以自动激发一些操作,比如监听在线的用户的数量.当增加一个HttpSession时,就激发sessionCre ...
- java通过IP地址获取物理位置
import java.io.*; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern ...
- EasyUI 分页 简洁代码
做分页代码,看到网上很多人实现的方法,那是各种调用,各种获取对象.我很不解,因为Easyui已经给我们了分页的具体实现,为什么有些人要画蛇添足呢. 其实真正的分页,在你的代码中,别人可能都没有注意到, ...
- PHP可变函数
可变函数是指如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并尝试执行它 可变函数可以用来实现包括回调函数,函数表在内的用途 $str = 'strtolower'; echo $str( ...
- ubuntu16下的/etc/resolv.conf重置的解决方案
此文件存放了网络网关信息,重启后会刷新,刷新来源有两个可能 一个是根据文件中的resolvconf目录下的resolv.conf.d目录下的base文件 另一个来源是/etc/network/inte ...
- 2019.02.09 bzoj2839: 集合计数(容斥原理)
传送门 题意简述:对于一个有N个元素的集合在其2^N个子集中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数. 思路:考虑枚举相交的是哪kkk个,有CnkC_n^kCnk种方案 ...
- 1-9-假期训练心得(dp+bfs)
题目一:传送门 思路:就是简单的bfs,注意仔细审题,加上对转弯次数的判断. 题目二:传送门 思路:简单dp,记录每一秒每个位置接到的大饼的数量. 状态转移方程:dp[i][j]=max(dp[i][ ...