C# gridview 列头画表格

GridView系列(一)排序列头加箭头 @ Page Language="C#" AutoEventWireup="true" CodeFile="GridView.aspx.cs" Inherits="GridView" %>DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-trans 阅读详情

http://www.csframework.com/archive/2/arc-2-20110713-1691.htm

给DevExpress GridView的选择列Header添加CheckBox实现对所有数据行的全选功能

看图:

贴图图片


贴图图片

显示选择行的资料:

贴图图片




/// <summary>
/// C# GridView列头添加CheckBox控件实现全选功能
/// by C/S框架网 www.csframework.com
/// </summary>
public class GridCheckMarksSelection
{
   protected GridView _GridView;
   protected ArrayList _Selection;
   private GridColumn _CheckColumn; //自动创建的Column
   private RepositoryItemCheckEdit _CheckEdit;
   
   public GridCheckMarksSelection()
   {
      _Selection = new ArrayList();
   }
   
   public GridCheckMarksSelection(GridView view)
   : this()
   {
      this.View = view;
   }
   
   protected virtual void Attach(GridView view)
   {
      if (view == null)
      {
         return;
      }
      _Selection.Clear();
      this._GridView = view;
      _CheckEdit = (RepositoryItemCheckEdit)view.GridControl.RepositoryItems.Add("CheckEdit");
      //
      _CheckEdit.EditValueChanged += Edit_EditValueChanged;
      
      _CheckColumn = view.Columns.Add();
      _CheckColumn.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
      _CheckColumn.VisibleIndex = int.MaxValue;
      _CheckColumn.FieldName = "CheckMarkSelection";
      _CheckColumn.Caption = "Mark";
      _CheckColumn.OptionsColumn.ShowCaption = false;
      _CheckColumn.UnboundType = DevExpress.Data.UnboundColumnType.Boolean;
      _CheckColumn.ColumnEdit = _CheckEdit;
      
      
      view.Click += View_Click;
      view.CustomDrawColumnHeader += View_CustomDrawColumnHeader;
      view.CustomDrawGroupRow += View_CustomDrawGroupRow;
      view.CustomUnboundColumnData += view_CustomUnboundColumnData;
      view.RowStyle += view_RowStyle;
   }
   
   protected virtual void Detach()
   {
      if (View == null)
      {
         return;
      }
      if ((_CheckColumn != null))
      {
         _CheckColumn.Dispose();
      }
      if ((_CheckEdit != null))
      {
         View.GridControl.RepositoryItems.Remove(_CheckEdit);
         _CheckEdit.Dispose();
      }
      _GridView.Click -= View_Click;
      _GridView.CustomDrawColumnHeader -= View_CustomDrawColumnHeader;
      _GridView.CustomDrawGroupRow -= View_CustomDrawGroupRow;
      _GridView.CustomUnboundColumnData -= (view_CustomUnboundColumnData);
      _GridView.RowStyle -= view_RowStyle;
      
      View = null;
   }
   
   protected void DrawCheckBox(Graphics g, Rectangle r, bool Checked, bool Grayed)
   {
      DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo info = default(DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo);
      DevExpress.XtraEditors.Drawing.CheckEditPainter painter = default(DevExpress.XtraEditors.Drawing.CheckEditPainter);
      DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs args = default(DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs);
      info = (DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo)_CheckEdit.CreateViewInfo();
      painter = (DevExpress.XtraEditors.Drawing.CheckEditPainter)_CheckEdit.CreatePainter();
      if (Grayed)
      {
         info.EditValue = _CheckEdit.ValueGrayed;
      }
      else
      {
         info.EditValue = Checked;
      }
      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();
   }
   
   private void View_Click(object sender, EventArgs e)
   {
      GridHitInfo info = default(GridHitInfo);
      Point pt = View.GridControl.PointToClient(Control.MousePosition);
      info = View.CalcHitInfo(pt);
      if (info.InColumn & object.ReferenceEquals(info.Column, _CheckColumn))
      {
         if (SelectedCount == View.DataRowCount)
         {
            ClearSelection();
         }
         else
         {
            SelectAll();
         }
      }
      if (info.InRow & View.IsGroupRow(info.RowHandle) & info.HitTest != GridHitTest.RowGroupButton)
      {
         bool selected = IsGroupRowSelected(info.RowHandle);
         SelectGroup(info.RowHandle, !selected);
      }
   }
   
   private void View_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
   {
      if (object.ReferenceEquals(e.Column, _CheckColumn))
      {
         e.Info.InnerElements.Clear();
         e.Painter.DrawObject(e.Info);
         bool gray = SelectedCount > 0 & SelectedCount < View.DataRowCount;
         DrawCheckBox(e.Graphics, e.Bounds, SelectedCount == View.DataRowCount, gray);
         e.Handled = true;
      }
   }
   
   private void View_CustomDrawGroupRow(object sender, RowObjectCustomDrawEventArgs e)
   {
      DevExpress.XtraGrid.Views.Grid.ViewInfo.GridGroupRowInfo info = default(DevExpress.XtraGrid.Views.Grid.ViewInfo.GridGroupRowInfo);
      info = (DevExpress.XtraGrid.Views.Grid.ViewInfo.GridGroupRowInfo)e.Info;
      
      info.GroupText = " " + info.GroupText.TrimStart();
      e.Info.Paint.FillRectangle(e.Graphics, e.Appearance.GetBackBrush(e.Cache), e.Bounds);
      e.Painter.DrawObject(e.Info);
      
      Rectangle r = info.ButtonBounds;
      r.Offset(r.Width * 2, 0);
      
      int g = GroupRowSelectionStatus(e.RowHandle);
      DrawCheckBox(e.Graphics, r, g > 0, g < 0);
      e.Handled = true;
   }
   
   private void view_RowStyle(object sender, RowStyleEventArgs e)
   {
      if (IsRowSelected(e.RowHandle))
      {
         e.Appearance.BackColor = SystemColors.Highlight;
         e.Appearance.ForeColor = SystemColors.HighlightText;
      }
   }
   
   public GridView View
   {
      get { return _GridView; }
      set
      {
         if ((!object.ReferenceEquals(_GridView, value)))
         {
            Detach();
            Attach(value);
         }
      }
   }
   
   public GridColumn CheckMarkColumn
   {
      get { return _CheckColumn; }
   }
   
   public int SelectedCount
   {
      get { return _Selection.Count; }
   }
   
   public object GetSelectedRow(int index)
   {
      return this._Selection[index];
   }
   
   public int GetSelectedIndex(object row)
   {
      return _Selection.IndexOf(row);
   }
   
   public void ClearSelection()
   {
      _Selection.Clear();
      Invalidate();
   }
   
   private void Invalidate()
   {
      View.BeginUpdate();
      View.EndUpdate();
   }
   
   public void SelectAll()
   {
      _Selection.Clear();
      if (View.DataSource is ICollection)
      {
         // fast
         _Selection.AddRange((ICollection)View.DataSource);
      }
      else
      {
         int i = 0;
         for (i = 0; i <= View.DataRowCount - 1; i++)
         {
            // slow
            _Selection.Add(View.GetRow(i));
         }
      }
      Invalidate();
   }
   
   public void SelectGroup(int rowHandle, bool @select)
   {
      if (IsGroupRowSelected(rowHandle) & @select)
      {
         return;
      }
      int i = 0;
      for (i = 0; i <= (View.GetChildRowCount(rowHandle)) - 1; i++)
      {
         int childRowHandle = View.GetChildRowHandle(rowHandle, i);
         if (View.IsGroupRow(childRowHandle))
         {
            SelectGroup(childRowHandle, @select);
         }
         else
         {
            SelectRow(childRowHandle, @select, false);
         }
      }
      Invalidate();
   }
   
   public void SelectRow(int rowHandle, bool @select)
   {
      SelectRow(rowHandle, @select, true);
   }
   
   private void SelectRow(int rowHandle, bool @select, bool invalidate)
   {
      if (IsRowSelected(rowHandle) == @select)
      {
         return;
      }
      object row = View.GetRow(rowHandle);
      if (@select)
      {
         _Selection.Add(row);
      }
      else
      {
         _Selection.Remove(row);
      }
      if (invalidate)
      {
         this.Invalidate();
      }
   }
   
   public int GroupRowSelectionStatus(int rowHandle)
   {
      int count = 0;
      int i = 0;
      for (i = 0; i <= (View.GetChildRowCount(rowHandle)) - 1; i++)
      {
         int row = View.GetChildRowHandle(rowHandle, i);
         if (View.IsGroupRow(row))
         {
            int g = GroupRowSelectionStatus(row);
            if (g < 0)
            {
               return g;
            }
            if (g > 0)
            {
               count += 1;
            }
         }
         else
         {
            if (IsRowSelected(row))
            {
               count += 1;
            }
         }
      }
      if (count == 0)
      {
         return 0;
      }
      if (count == View.GetChildRowCount(rowHandle))
      {
         return 1;
      }
      return -1;
   }
   
   public bool IsGroupRowSelected(int rowHandle)
   {
      int i = 0;
      for (i = 0; i <= (View.GetChildRowCount(rowHandle)) - 1; i++)
      {
         int row = View.GetChildRowHandle(rowHandle, i);
         if (View.IsGroupRow(row))
         {
            if (!IsGroupRowSelected(row))
            {
               return false;
            }
         }
         else
         {
            if (!IsRowSelected(row))
            {
               return false;
            }
         }
      }
      return true;
   }
   
   public bool IsRowSelected(int rowHandle)
   {
      if (View.IsGroupRow(rowHandle))
      {
         return IsGroupRowSelected(rowHandle);
      }
      
      object row = View.GetRow(rowHandle);
      return GetSelectedIndex(row) != -1;
   }
   
   private void view_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
   {
      if (object.ReferenceEquals(e.Column, CheckMarkColumn))
      {
         if (e.IsGetData)
         {
            e.Value = IsRowSelected(e.RowHandle);
         }
         else
         {
            SelectRow(e.RowHandle, (bool)e.Value);
         }
      }
   }
   
   private void Edit_EditValueChanged(object sender, EventArgs e)
   {
      View.PostEditor();
   }
}

[C#] 动态生成GridView的模版列TemplateField,并在模版列TemplateField中添加复选框CheckBox 上篇文章,我们可以动态生成GridView的绑定数据列BoundField和命令列CommandField,现在说说如何动态生成GridView的模版列TemplateField,并在模版列TemplateField中添加复选框CheckBox首先,第一步,创建一个类MyTemplate.cspublic class MyTemplate:ITemplate...{    privat 阅读详情

相关推荐

C# GridView 给某行或某列绑定点击事件和鼠标事件

后台代码 protected void gvProduct_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow)//判断单击行是否为数据行

amoniyibeizi的专栏 4339

C# GridView列头添加CheckBox控件实现全选功

给DevExpress GridView的选择列Header添加CheckBox实现对所有数据行的全选功能 看图: 显示选择行的资料: /// /// C# GridView列头添加CheckBox控件实现全选功能  /// by C/S框架网 www.csframework.com  ///   public class GridCheckMa

4983

asp c# .net GridView模板列

asp c# .net GridView使用 Visible="false"隐藏以后如何获取到值 可以使用模板列,前台代码:      '>   后台可通过 GridView3.Rows[e.RowIndex].FindControl("Label1") as Label).Text 就可以获得隐藏列的值 '> protected

phwater的专栏 3714

[C#] 动态生成GridView的列

想实现这样的功能吗?在程序运行中使GridView动态生成列,而并不是将列固定写死在GridView上写个绑定GrideView的方法    /**////     /// 绑定生成GridView    ///     /// 要绑定的GridView    /// GridView的数据源    /// GridView的DataKeyNames    public static 

有了大树的幸福树懒~~~的专栏 5305

GridView模板列中添加DropDownList

%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>html xmlns="http://www.w3.org/1999/xhtml" >head runat="server">    title>GridView模板列中添加Dr

请叫我麦兜兜儿 5126

devexpress GridControl实现多选和列头全选

大名鼎鼎的DEV啊……弄了一个gridControl结果不知道如何加选择列,还有表头全选上网搜了搜终于搜到解决方案……结果解决办法麻烦的要死…… 这么一个挺基础的需求,DEV不提供解决方案?这没道理吧?怎么办啊……就差这一个功能了……换控件不划算啊 有这么一个方法来完成(只适合winform): 1、绑定数据的源表添加一列DataTabledt=ds.Tabl...

qq_18932003的博客 3821

C#中GridView隐藏列的方法

一开始解决这个问题的时候,查了google,发现都不是我想要的,在 GridViewColumn中,它有个属性Width,如果设置为0,就没有显示出来,其实这个是虚假的,你可以把它再界面上拉长,因此不是我想要的。 后来在网上查到说是用GridView.Columns[columns].Visible = false;但是GridViewColumn.Columns[columns

hustypf的专栏 1万+

DataGridView列标头带数据筛选功能(含C#源码DEMO)

DataGridView列标头带数据筛选功能(含C#源码DEMO)), 类似Excel筛选功能的 DataGridView 源代码,调用简单,功能好用,C#示例都有。筛选后状态栏显示过滤后的条数及显示全部的HPLINK标签按钮。

关于GridView点击列头排序

关于GridView列头点击排序 做ASP.NET Web项目开发,经常会和GridView打交道,免不了会根据需求要有列头点击排序的功能,在网上看了很多资料都没有把实例讲全,下面以linq原生语法完成点击列头排序实例: 1)在页面源码中设置AllowSorting属性为True并增加OnSorting事件,以及在绑定列中增加对应的SortExpression属性,如下图:

moshansk的专栏 3339

DevExpress实现GridControl列头绘制Checkbox的方法

本文实例展示了DevExpress实现GridControl列头绘制Checkbox的方法,具体实现方法如下: 主要功能代码如下: /// <summary> /// 为列头绘制CheckBox /// </summary> /// <param name=view>GridView</param> /// <param name=checkItem>RepositoryItemCheckEdit</param> /// <param name=fieldName>需要绘制Checkbox的列名</param> /// <param name=e>ColumnHeaderCu

怎么选?一文读懂12种SPC控制图,从基础到进阶,再到Python代码实现

本文系统介绍了12种常用SPC控制图的应用场景和特点,包括计量型(Xbar-R图、Xbar-s图、I-MR图等)、计数型(P图、NP图、U图等)及进阶控制图(EWMA图、CUSUM图、多元控制图)。文章强调控制图是SPC的核心工具,能有效区分过程变异类型,实现"预防优于检测"的质量管理目标。通过数据示例和Python代码展示了各类控制图的实现方法,为质量管理人员提供了实用参考。

m0_56592100的博客 4146

GridView动态绑定列

      在VS2005我们利用GridView的频率比较的大,但我们的数据列一般是不发生变化的,但在实际的工作中,我们需要对GridView的数据列进行修改,进行重新绑定,以下以进行动态绑定的代码,希望对您有所帮助,以下是HTML代码:...@ Page Language="C#" AutoEventWireup="true" StylesheetTheme="Default" The

My Blog's 9819

Java云上香云祭祀线上祭祀系统小程序源码

云上香云祭祀线上祭祀系统”,不仅是一种祭祀方式的创新,更是对传统文化的一次深情致敬。它让我们明白,无论时代如何变迁,对亲人的怀念与尊重永远不会改变。在这个特别的平台上,让我们共同守护那份跨越时空的爱与思念,让心灵得以安放,让生命之树常青。🌳。

2401_84413757的博客 804

C#开发学习笔记:GridView设置数据相同的列合并

using DevExpress.XtraGrid.Views.Grid; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using...

JustWantToFly的博客 1682

山东大学软件工程应用与实践——GMSSL开源库(六)——SM9密钥交换协议

2021SC@SDUSC 文章目录基本概念符号及辅助算法SM9密钥交换协议 基本概念 1976年,Diffie和Hellman在其题为《密码学的新方向》的论文中首次给出了公钥密码学的定义,并提出了Diffie-Hellman密钥交换算法。该算法解决了对称密码体制中的密钥分发问题,使得通信双方可以通过公开信道安全地交换共享密钥。 使用SM9通信的双方通过对方的标识和自身的私钥,经过两次或者可选的三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。该密钥可以作为对称密码算法的会话密钥,其中可选步骤用来实

m0_51588039的博客 1988

【车间调度】车间调度问题的分类

本系列为自己学习调度相关知识的记录,如有误请指出,也欢迎调度方向的小伙伴加我好友共同交流。 车间调度问题的分类 根据工件和车间构成不同,车间调度问题可分为以下几种 1.单机调度问题 在单机调度问题(S,SMP)中,加工系统只有一台机床,待加工的工件有且仅有一道工序,所有工件都在该机床上进行加工。此问题是最简单的调度问题,当生产车间出现瓶颈机床时的调度就可视为此调度问题。 ...

weixin_51656605的博客 7430

设置C#.net GridView 列可编辑

刚开始接触.net编程,问题太简单了请不要笑话 我用的编程工具是vs2005,基于web开发,当我拖一个GridView控件时后,绑定好相应的数据源,然后运行,然而所有的列都不能编辑,我不知道为什么?到底应该如何设置才可以让GRIDVIEW可编辑,谢谢各位了!问题补充:加分了! 呵呵,其实是我把C#.net和其他语言混淆了,这个GRIDVIEW根本就不能这么实现,没有正确答案,只好把几个挂边的

4135

Starlink卫星动力学系统仿真建模前传1-时空系统介绍

对于在轨道上运动的航天器由于速度接近第一宇宙速度,为了获取准确的位置信息对时间的精度要求极高,为了准确描述航天器的运动规律,本节对卫星仿真建模中用到的各种时间系统进行介绍。卫星轨道平面为坐标平面,坐标原点位于卫星系统质心,轴由卫星系统质心指向地心(当地垂线),轴在轨道面内垂直于轴并指向卫星的前进方向,轴同、轴构成右手系,指向轨道面负法线方向。不同坐标系下的建立的运动形式与复杂程度不同,会直接影响运动方程的求解繁简程度,因此,选取适当的坐标系具有重要的意义。定义星体坐标系,该坐标系简记为系,与卫星本体固连。

xspace的博客 1439

C#中 GridView控件的使用

GridView控件是一个visualStudio自带的数据控件,它可以非常快速的将数据以表格方式显示在web页面上。下面就是一个利用GridView控件进行数据绑定的小例子,内容如下: 数据来源自一个XML文件,至于如何操作XML文件,这里不作详细描述,具体可以参考 http://www.cnblogs.com/programsky/p/3816073.html 1.XML内容如下: <?xml version="1.0" encoding="utf-8"?> <gunbook>

zq9955的博客 1万+

AMDGPU驱动中Doorbell与Event机制简要对比

摘要:AMDGpu驱动中,Doorbell和Event是两种异步通知机制。Doorbell是CPU→GPU的单向硬件通知,通过写MMIO寄存器触发GPU拉取任务,延迟低且无需内核介入,适用于队列任务提交。Event是GPU→CPU的双向同步通知,基于中断和内核事件对象,支持阻塞等待,用于任务完成或异常上报。核心区别在于方向、用途和实现方式:Doorbell侧重任务触发,Event侧重状态反馈。两者配合实现高效的任务下发与完成通知流程。

图形/计算GPU的驱动与虚拟化技术分享园地 1860

ENVI预处理GF-1号WFV1遥感数据提取NDVI指数

使用ENVI处理GF-1号遥感数据提取NDVI指数

所有专家都曾始于新手 8179

GridView绑定数据源List列排序

GridView, GridList,ListView列排序,数据源是泛型List,委托,List.Sort(), C#2.0,VS2005,VS2005=8

Keep It Short And Simple 4569

Vue2+OpenLayers动态绘制两个经纬度并计算距离(提供Gitee源码)

动态绘制两个经纬度并计算它们之间的距离。

黄团团的个人博客 366
上一篇: C# 串口通讯
下一篇: DEV GRIDVIEW 表格内嵌套表格
蓝魔鬼仙
博客等级 码龄15年 14粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值