热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实现DataGridView和DevExpress.GridControl表头全选功能

1)DevExpress控件的GridView的实现多选操作先讲DevExpress控件的GridView的实现,要实现的功能基本上是处理单击全选操作、重新绘制表头等操作,首先在加载第一步实现相

 1)DevExpress控件的GridView的实现多选操作

  先讲DevExpress控件的GridView的实现,要实现的功能基本上是处理单击全选操作、重新绘制表头等操作,首先在加载第一步实现相关的事件和操作,如下所示。

 this.gridView1.Click += new System.EventHandler(this.gridView1_Click);
  this.gridView1.CustomDrawColumnHeader += 
new DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventHandler
(this.gridView1_CustomDrawColumnHeader);
  this.gridView1.DataSourceChanged += 
new EventHandler(gridView1_DataSourceChanged);

  然后就是实现里面的事件操作了,对应的代码如下所示。

        private void gridView1_Click(object sender, EventArgs e)
         {
  if (DevControlHelper.ClickGridCheckBox(this.gridView1,  "Check", m_checkStatus))
             { 
                 m_checkStatus = !m_checkStatus; 
             } 
         } 

         private void gridView1_CustomDrawColumnHeader
(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e) 
         { 
             if (e.Column != null  && e.Column.FieldName == "Check")
             { 
                 e.Info.InnerElements.Clear(); 
                 e.Painter.DrawObject(e.Info); 
                 DevControlHelper.DrawCheckBox(e, m_checkStatus); 
                 e.Handled = true; 
             } 
         } 
         void gridView1_DataSourceChanged(object sender, EventArgs e) 
         { 
             GridColumn column =
 this.gridView1.Columns.ColumnByFieldName( "Check");
             if (column != null) 
             { 
                 column.Width = 80; 
                 column.OptionsColumn.ShowCaption = false; 
                 column.ColumnEdit = new RepositoryItemCheckEdit(); 
             } 
        }

  其中单击和绘制表头的操作,交给另外一个类DevControlHelper来独立进行处理,数据源变化gridView1_DataSourceChanged实现的操作是寻找对应的全选列,并设置列宽、隐藏表头标题,并设置为复选框样式。

  DevControlHelper 类的实现代码如下所示:

        public static void DrawCheckBox
(DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e, bool chk)
         {
             RepositoryItemCheckEdit repositoryCheck = 
e.Column.ColumnEdit as RepositoryItemCheckEdit; 
             if (repositoryCheck != null) 
             { 
                 Graphics g = e.Graphics; 
                 Rectangle r = e.Bounds; 

                 DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo info; 
                 DevExpress.XtraEditors.Drawing.CheckEditPainter painter; 
                 DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs args; 
                 info = repositoryCheck.CreateViewInfo() as
 DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo; 

                 painter = repositoryCheck.CreatePainter() 
as DevExpress.XtraEditors.Drawing.CheckEditPainter; 
                 info.EditValue = chk; 
                 info.Bounds = r; 
                 info.CalcViewInfo(g); 
                 args = new DevExpress.XtraEditors.
Drawing.ControlGraphicsInfoArgs(info, new DevExpress.Utils.Drawing.GraphicsCache(g), r); 
                 painter.Draw(args); 
                 args.Cache.Dispose(); 
             } 
         } 

         public static bool ClickGridCheckBox
DevExpress.XtraGrid.Views.Grid.GridView gridView, string fieldName, bool currentStatus) 
         { 
             bool result = false; 
             if (gridView != null) 
             { 
                 gridView.ClearSorting();//禁止排序 

                 gridView.PostEditor(); 
                 DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo info; 
                 Point pt = gridView.GridControl.PointToClient(Control.MousePosition); 
                 info = gridView.CalcHitInfo(pt); 
                 if (info.InColumn  && info.Column !=
 null && info.Column.FieldName == fieldName)
                 { 
                     for (int i = 0; i  < gridView.RowCount; i++)
                     { 
                         gridView.SetRowCellValue(i, fieldName, !currentStatus); 
                     } 
                     return true; 
                 } 
             } 
             return result; 
        } 

  2)传统DataGridView实现全选操作

  首先在第一列增加一个CheckBox控件,然后通过相关的事件,调整其位置,并相应对应的单击全选操作,初始化代码如下所示。

        CheckBox HeaderCheckBox = null;
         public FrmNormalGridViewSelect()
         { 
             InitializeComponent(); 

             if (!this.DesignMode) 
             { 
                 HeaderCheckBox = new CheckBox(); 
                 HeaderCheckBox.Size = new Size(15, 15); 
                 this.dgvSelectAll.Controls.Add(HeaderCheckBox); 

                 HeaderCheckBox.KeyUp += new KeyEventHandler(HeaderCheckBox_KeyUp); 
                 HeaderCheckBox.MouseClick += 
new MouseEventHandler(HeaderCheckBox_MouseClick); 
                 dgvSelectAll.CurrentCellDirtyStateChanged += 
new EventHandler(dgvSelectAll_CurrentCellDirtyStateChanged); 
                 dgvSelectAll.CellPainting +=
 new DataGridViewCellPaintingEventHandler(dgvSelectAll_CellPainting); 
             } 
    }

  事件实现了CheckBox重绘调整,并处理单击事件,如下所示。

        private void HeaderCheckBox_MouseClick(object sender, MouseEventArgs e)
         {
             HeaderCheckBoxClick((CheckBox)sender); 
         } 

         private void dgvSelectAll_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
         { 
             if (e.RowIndex == -1  && e.ColumnIndex == 0)
                     ResetHeaderCheckBoxLocation(e.ColumnIndex, e.RowIndex); 
         } 

         private void ResetHeaderCheckBoxLocation(int ColumnIndex, int RowIndex) 
         { 
             Rectangle oRectangle = 
this.dgvSelectAll.GetCellDisplayRectangle(ColumnIndex, RowIndex, true); 
             Point oPoint = new Point(); 
             oPoint.X =
 oRectangle.Location.X + (oRectangle.Width - HeaderCheckBox.Width) / 2 + 1; 
             oPoint.Y =
 oRectangle.Location.Y + (oRectangle.Height - HeaderCheckBox.Height) / 2 + 1; 
             HeaderCheckBox.Location = oPoint; 
         } 

         private void HeaderCheckBoxClick(CheckBox HCheckBox) 
         { 
             foreach (DataGridViewRow Row in dgvSelectAll.Rows) 
             { 
                 ((DataGridViewCheckBoxCell)Row.Cells[ "chkBxSelect"]).Value = HCheckBox.Checked;
             } 
             dgvSelectAll.RefreshEdit(); 
    }

推荐阅读
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • 五、RabbitMQ Java Client基本使用详解
    JavaClient的5.x版本系列需要JDK8,用于编译和运行。在Android上,仅支持Android7.0或更高版本。4.x版本系列支持7.0之前 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 本文整理了Java中com.evernote.android.job.JobRequest.getTransientExtras()方法的一些代码示例,展示了 ... [详细]
author-avatar
miedao1592_460
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有