博主这几天就准备离职了,以后不再做.Net开发。因此这应该是我写的最后一篇关于dev控件的博文。既然是最后一篇,那就写的具体一些。画个圆满的省略号......

本文介绍gridcontrol怎样实现复选框功能。网上有几篇这种文章,但功能不够完好,按它做的还有问题。因此我就具体的介绍我的一下实现方法供大家參考。

首先看下我的gridcontrol(因为数据部分涉及到项目的保密内容。所以呆会的实现效果就不上图了):

我这里有一个选择某行后,将改行的班级名字显示在上面的文本框的功能,全选则所有显示。

各个控件的name:

班级文本框:barEditClass

全选复选框:checkEditAll

表格复选框:checkEditClass

表格控件:gcSelectClass、gvSelectClass

以下介绍具体的实现方法:

第一步:拖一个gridcontrol控件,点击最后一列,选择columEdit属性,在弹出的下拉框中选择checkbox控件,就可以在表格的最后一列显示复选。

第二步:拖一个checkEdit控件,放在表格的最后一列的列头作为全选复选框,可是你会发现执行时这个复选框的位置是偏的。也就是不在列头上,以下解决问题,选中checkEditAll控件,将其Anchor属性设为Top, Right,再选中复选框列,将MinWidth和MaxWidth属性的值设为Width的属性值(我这里是104),再次执行。你会发现复选框列的大小不能改变了。全选复选框也就老老实实地呆在列头上。

第三步:绑定数据源。我这里用的数据源是自己定义的实体类,前面的几列放在一个字段中。后面的复选框列放在一个单独的字段。

当然你用datatable的话也是一样的道理。

在数据源中加入一个“check”字段,类型为bool,然后将表格的复选框列的fieldname字段设为”check“。成功绑定数据源

第四步:这一步实现选中复选框后将该行的班级名称显示在上面的班级文本框上。

找到checkEditClass控件,在该控件的事件中创建CheckedChanged事件(选中状态改变后触发该事件)。

以下看代码(为了防止程序崩溃,最好加上try...catch):

                //显示班级
gvSelectClass.CloseEditor();
gvSelectClass.UpdateCurrentRow();
string name = gvSelectClass.GetRowCellValue(gvSelectClass.FocusedRowHandle, gvSelectClass.Columns[1]).ToString();
string value = gvSelectClass.GetRowCellValue(gvSelectClass.FocusedRowHandle, gvSelectClass.Columns[4]).ToString();
//添加班级
if (value == "True")
{
if (m_className.IndexOf(name) > -1)
{
}
else
{
if (m_className == "")
{
m_className += name;
}
else
{
m_className += ",";
m_className += name;
}
}
}
//去掉班级
else
{
if (m_className.IndexOf(name) > -1)
{
string[] classNames = m_className.Split(',');
if (classNames[0] == name)
{
m_className = m_className.Replace(name + ",", "");
}
else
{
m_className = m_className.Replace("," + name, "");
}
}
}
barEditClass.EditValue = m_className;

我们一行一行的来看代码,前两行是在改变复选框状态后更新数据源。可不要小瞧它们,这两行代码是不可缺少的。假设不用会导致复选框状态不能及时更新到数据源,进而导致错误结果。第三行和第四行用来获取选中的复选框所在行的复选框状态和班级名称,之后的代码添加班级和去掉班级的。班级之间以逗号间隔,这里我定义了一个全局变量m_className,相信大家都看得懂。最后一行代码即将要显示的班级名字显示在文本框barEditClass上面。

第五步:实现全选和所有取消功能。选中checkEditAll控件。在控件事件中创建CheckedCh

最新文章

  1. move_upload_file 因为文件字符集编码iconv引起的问题
  2. JAVA生产者消费者的实现
  3. iOS Architecture和Valid architectures
  4. About the Storage allocation
  5. Flume的Avro Sink和Avro Source研究之一: Avro Source
  6. Java 7 Fork/Join 并行计算框架概览
  7. Java基础知识强化之IO流笔记56:IO流练习之 登录注册IO版
  8. 利用MVC的过滤器实现url的参数加密和解密
  9. sqlserver exists和in 与exists和not in
  10. git merge 分支
  11. 5.7.2.1 Math对象
  12. Boost::filesystem 使用小笔记
  13. 扯谈网络编程之自己实现ping
  14. 后台方庄List razor 循环
  15. AQS简简单单过一遍
  16. IDT表连接
  17. 【原】git常用命令笔记
  18. ps把照片背景变成透明[原为白色或其他颜色]
  19. RAMPS1.4 3d打印控制板接线与测试
  20. Linux上启动Cron任务

热门文章

  1. BZOJ 3786 星系探索 ——Splay
  2. 百度网络监控实战:NetRadar横空出世(下)
  3. CF 451E Devu and Flowers
  4. POJ3928 Ping pong
  5. CodeforcesD. Aztec Catacombs
  6. 转 Vim操作
  7. unity3d各平台通讯原生的平台API的说明
  8. perfect-scrollbar 轻量级滚动插件
  9. html移动端 -- meta-模板 + rem
  10. ubuntu下打开windows里的txt文件乱码解决