近期接手一个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全选反选、同步列表项的处理的更多相关文章

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

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

  2. C# WinForm中实现CheckBox全选反选功能

    今天一群里有人问到这个功能,其实应该挺简单,但提问题的人问题的出发点并没有描述清楚.因此,一个简简单单的需求,就引起了群内热烈的讨论.下面看看这个功能如何去实现,先上效果: 下面直接上代码,请不要在意 ...

  3. 表单javascript checkbox全选 反选 全不选

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  4. vue中的checkbox全选和反选

    前几天有个博客园的朋友问小颖,小颖之前写的vue2.0在table中实现全选和反选  .Vue.js实现checkbox的全选和反选,为什么他将里面的js复制下来,但是实现不了全选和反选.小颖当时看他 ...

  5. jquery、js操作checkbox全选反选

    全选反选checkbox在实际应用中比较常见,本文有个不错的示例,大家可以参考下 操作checkbox,全选反选//全选 function checkAll() { $('input[name=&qu ...

  6. Jquery 1.8全选反选删除选中项实现

    JQuery1.6以后,Prop的出现,让1.6以下的全选反选效果全部失效了.以下是修正后的版本: 全选反选效果: $(".checkbox").click(function () ...

  7. datagridview里面的checkbox全选和取消全选

    全选 设置全选button,选中所有的checkbox private void selectAll_Click(object sender, EventArgs e) { //遍历datagridv ...

  8. jQuery实现checkbox全选反选及删除等操作

    1.list.html 说明:用checkbox数组Check[]存放每一行的ID值 <div id="con"> <table width="100% ...

  9. checkbox 全选反选实现全代码

    //跳转到指定action function validateForm(url){ if($("#form").form('validate')){ var x=document. ...

随机推荐

  1. swift textfiled 输入完毕 return 隐藏键盘 方法

    学习swift 真是件头疼的事情 会的人少,又没有OC基础,所以 且学切珍惜吧. 在做登录的时候发现textfiled 自动调用键盘后不能隐藏?头疼 ~~~~询问了好多人 终于有人自写解答 为了方便后 ...

  2. jmeter对需要登录的接口进行性能测测试

    只需要一步: https://www.testwo.com/blog/7253

  3. 学习第一天-JAVA

    第一题打印1到1000的奇数 public class OneToThousandOdd{ public static void main(String[] args) { short num = 1 ...

  4. 【转】VxWorks中高精度实时时钟的实现及C语言汇编混合编程

    最近一个项目中需要在VxWorks下使用一个高精度实时时钟,要求精度为1ms,溢 出时间大于5小时.VxWorks提供系统时钟,该时钟在操作系统启动后开始计数,精度为1个tick,可以通过tickGe ...

  5. UVALive-7041(回文树

    题意:给你两个字符串,问你有多少对公共回文串. 思路:先对a字符串建回文树.然后再把b字符串加进去就好了. #include<cstdio> #include<cmath> # ...

  6. socketserver模块实现并发和连接合法性验证

    一.socketserver模块 1.sockeserver的源码流程 2.简单的使用 socketserver服务端 import socketserver class MyServer(socke ...

  7. Vue自定义指令报错:Failed to resolve directive: xxx

    Vue自定义指令报错 Failed to resolve directive: modle 这个报错有2个原因: 1.指令单词拼错 2.Vue.directive() 这个方法没有写在 new Vue ...

  8. mysql order by 中文 排序

    mysql order by 中文 排序 1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都 ...

  9. IntelliJ IDEA 2017版 spring-boot2.0.2 自动配置Condition

    描述: 编译器修改参数      -Dfile.encoding=GBK     -Dstr.encoding=GBK Condition位置: 某一个类或注解存在的时候,装配,否则不装配 相关代码: ...

  10. php 获取当前在线用户数量

    <?php //在线人数统计 $filename='online.txt';//数据文件 $cookiename='VGOTCN_OnLineCount';//cookie名称 $onlinet ...