1、项目有实现不GridControl中的数据导出Excel的功能,导出的时候是把所有的数据全部导出,现在要实现可供选择的灵活的导出功能。除了全选可全不选,还可以对每一行实现选择的功能。实现起来比较简单,界面也很简单,先贴一下实现的界面。

  2、实现思路:先要在传给GridControl的DataTable中增加新的字段,字段名称可以自己选择,显示出方框的形状以供选择。默认全部选择,所以调用函数时,传入的isSelected为false。实现代码:

 public void AddChooseColumn(DataTable dt, bool isSelected)
{
if (dt == null || dt.Rows.Count == ) { return; }
if (dt.Columns.Contains("CHOOSE")) { return; }
dt.Columns.Add("CHOOSE", typeof(Boolean));
dt.Columns["CHOOSE"].DefaultValue = false;
foreach (DataRow row in dt.Rows)
row["CHOOSE"] = isSelected;
dt.AcceptChanges();
}

  3、实现全选和全部不选的功能,由第二步知道当新增字段“CHOOSE”为false时是,全不选,那么当用户单击CheckEdit时(窗体上的全选选择框name为chkSelectAll)时,把字段“CHOOSE”设置成true即可实现全选功能。全选选择框的实现代码如下:

 Action<bool> allOrNotAll = flag =>
{
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
string name = column.ColumnName;
if (name.Equals(DataTableField.CHOOSE.ToString()))
{
row[name] = flag;
}
}
}
};
//全选
this.chkSelectAll.CheckStateChanged += (x, y) => allOrNotAll(this.chkSelectAll.Checked);

原本的代码是这样的:this.chkSelectAll.CheckStateChanged += delegate{ allOrNotAll(this.chkSelectAll.Checked);};因为有大括号,所以delegate之后的大括号在代码中单独占了一行,而大括号中的代码却只有一行,所以为了看起来更加清晰,改为了: this.chkSelectAll.CheckStateChanged += (x, y) => allOrNotAll(this.chkSelectAll.Checked); 参数想x,y是,object,EventArgs,在代码中没有用到,所以简单命名成想x,y.

  4、现在实现单选一行就可以了,思路是:当用户单击时,根据单击的坐标,对应的DataRow,如果对应的ColumnName=“CHOOSE”,那么就可以断定是要选择这一行。所以把数据中的row["CHOOSE"]设置为true,显示选中状态即可。代码如下所示。

 private static void SelectTicket(MouseEventArgs e, ColumnView gridView, string columnFieldName)
{
GridHitInfo hint = (GridHitInfo)gridView.CalcHitInfo(e.X, e.Y);
if ((gridView.RowCount <= ) || (!hint.InRowCell) || (hint.Column != gridView.Columns[columnFieldName]))
return;
DataRow hintRow = gridView.GetDataRow(hint.RowHandle);
if (hintRow == null)
return;
if (hintRow[columnFieldName] == null)
return;
hintRow["CHOOSE"] = !(bool)hintRow["CHOOSE"];
}

调用此函数的代码是:

            this.gridOperatorTask.Click += (obj, e) => SelectTicket((MouseEventArgs)e, this.advBandedGridView1, "CHOOSE");

到此功能已经实现了。

  感想:最近要过年了,一直都心思没写博客,看到别人写的很好的博客,从其中学到了好多知识,心里非常感激。今天把自己解决的问题写出来,万一有人遇到了可以参考一下。知识在于分享,以后要像其他优秀的人那样,不仅在停学习新的知识,而且把心得、总结写成博客分享出来,有很多的文章都使我受益匪浅。

dev 中的GridControl中的行实现选择的功能实现的更多相关文章

  1. 关于 Dev中的GridControl 中 GridView 的 PopulateColumns() 方法

    最近使用Dev控件,Gridview绑定数据源后不能显示数据,于是在网上查询,说是使用PopulateColumns()方法,可以显示数据.试了一下,管用. 于是在所有更新数据源数据后,都用上了这句话 ...

  2. WPF datagrid/gridcontrol 中选中多行,复制粘贴到excel或其他文本编辑器中

    wpf中 data grid 开启自带的选中,然后复制,可以到excel中直接粘贴,在某些业务场景中很实用,方便.开启也很简单: SelectionMode="Row" 加上这个, ...

  3. VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录

    VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录 一.描述 系统描述:win7旗舰版64位系统+VMware Workst ...

  4. Developer Express控件gridcontrol中gridView的某一个单元格是否可以自由输入

    场景:在Developer Express控件gridcontrol中的gridView中,当医生开的临时医嘱的医嘱类型为"中草药","计价总量"单元格不可以自 ...

  5. WPF界面开发:DevExpress WPF在GridControl中固定行时处理时刻

    DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...

  6. DevExpress中的gridControl选择问题

    在Dev控件中,gridControl是最常用的一个了. //直接通过gridView获取当前行 dr=this.gridView1.GetDataRow(this.gridView1.Focused ...

  7. MFC 编辑框中字体大小改变,行高不能改变,只能显示一半的问题,已解决。

    CKagulaCEdit是CEdit的一个继承类,m_edit的CKagulaCEdit类型的一个变量 调用的时候,是这样的: 编辑框中字体大小改变,行高不能改变,只能显示一半的问题,问题如下: 这时 ...

  8. 在命令行中运行eclipse中创建的java项目

    在命令行中运行eclipse中创建的java项目 博客分类: java相关 javaeclipse命令行  由于项目要求,需要对eclipse中的项目进行打包,似的可以在客户机上不装eclipse的情 ...

  9. Devexpress GridControl中combobox级联显示 z

    http://minmin86121.blog.163.com/blog/static/4968115720143163533356/ 在 使用GridControl时,可能会有需求要求某2列显示co ...

随机推荐

  1. Spark数据本地化-->如何达到性能调优的目的

    Spark数据本地化-->如何达到性能调优的目的 1.Spark数据的本地化:移动计算,而不是移动数据 2.Spark中的数据本地化级别: TaskSetManager 的 Locality L ...

  2. 简易漫画网站搭建-漫画喵Server版

    小喵的唠叨话:寒假的时候写了一个漫画爬虫,爬取了好几个漫画,不过一直没有找到合适的漫画阅读的工具.因此最近就试着自己写一个漫画的网站,放在公网上或者局域网里,这样就能随时随地用手机.Pad看漫画了. ...

  3. FastCGI超过活动超时时间

    线上环境:PHP5.4 and IIS 打开IIS管理器,找到FastCGI,打开后编辑选项 活动超时默认为70(秒) 请求超时默认为90(秒) 可根据项目需求来更改这两项的值

  4. Linux块设备驱动(二) _MTD驱动及其用户空间编程

    MTD(Memory Technology Device)即常说的Flash等使用存储芯片的存储设备,MTD子系统对应的是块设备驱动框架中的设备驱动层,可以说,MTD就是针对Flash设备设计的标准化 ...

  5. keepalive配置文件详解

    第一部分:全局定义块 1.email通知.作用:有故障,发邮件报警. 2.Lvs负载均衡器标识(lvs_id).在一个网络内,它应该是唯一的. 3.花括号“{}”.用来分隔定义块,因此必须成对出现.如 ...

  6. python如何保证输入键入数字

    要求:python写一个要求用户输入数字,如果不是数字就一直循环要求输入,直到输入数字为止的代码 错误打开方式: while True: ten=input('Enter a number:') if ...

  7. 在腾讯云上把Laravel整合万向优图图片管理能力,打造高效图片处理服务

    推荐理由: 现如今数据爆炸性增长,人类生活产出的数据越来越多,文字信息,图片信息,视频信息:但有很多信息我们都无法直接使用,需通过一定的处理,才能够获取其中对我们有用的信息,在腾讯云上的万向优图能够对 ...

  8. VC++中经常出现的内存泄露和指针问题

    要养成良好的编程习惯,每次用new开辟的新空间马上先写好释放语句delete.指针在程序中往往有很多细节问题,比如1.指针作为返回值,某个分支中进行赋值返回,另一个分支却没有值.2.指针作为函数参数传 ...

  9. MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ...

    下面是我update数据库时打印出来的异常: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSynt ...

  10. Mycat中的核心概念

      Mycat中的核心概念     Mycat中的核心概念 1.数据库中间件    Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...