DataGridView的单元格如何嵌入多个按钮控件
前段时间我有一个朋友面试公司的时候遇到这个面试题,他也给了份原题给我瞧瞧,并没有什么特别的要点,关于这一类问题,如何在网格上的单元格嵌入多个控件(如按钮、超链接等)问题,我在网上搜索了下这类问题,发现很多解答但是都杂乱,本篇文章帮助大家了解如何应对这类问题。
微软提供的DataGirdView网格控件可通过GetCellDisplayRectangle()方法将需要的控件嵌入单元格中,如:
this.Load += Form1_Load;
void Form1_Load(object sender, EventArgs e)
{
MulAutoBtnEdit();
}
private void MulAutoBtnEdit()
{
this.dataGridView1.Columns.Add("ColBtnEdit", "嵌入操作按钮");
this.dataGridView1.Columns["ColBtnEdit"].Width = 150;
int index = this.dataGridView1.Columns["ColBtnEdit"].Index;
this.dataGridView1.Columns["ColBtnEdit"].Resizable = DataGridViewTriState.False;
Button btnAdd = GetBtnByType("BtnAdd","新增");
Button btnEdit = GetBtnByType("BtnEdit", "修改");
Button btnDel = GetBtnByType("BtnDel", "删除");
this.dataGridView1.Controls.Add(btnAdd);
this.dataGridView1.Controls.Add(btnEdit);
this.dataGridView1.Controls.Add(btnDel);
Rectangle rectangle = this.dataGridView1.GetCellDisplayRectangle(index, 0, true);//获取当前单元格上的矩形区域
btnAdd.Size = btnEdit.Size = btnDel.Size = new Size(rectangle.Width / 3 + 1, rectangle.Height);
btnAdd.Location = new Point(rectangle.Left, rectangle.Top);
btnEdit.Location = new Point(rectangle.Left + btnAdd.Width, rectangle.Top);
btnDel.Location = new Point(rectangle.Left + btnAdd.Width + btnDel.Width, rectangle.Top);
}
private Button GetBtnByType(string strBtnName,string strBtnText)
{
Button btn = new Button();
btn.Name = strBtnName;
btn.Text = strBtnText;
btn.Click += btn_Click;
return btn;
}
private void btn_Click(object sender, EventArgs e)
{
if(sender is Button)
{
Button btn = (Button)sender;
MessageBox.Show(string.Format("点击按钮:{0}",btn.Text));
}
}
效果图:

通过以上的操作即可将多个按钮嵌入到单元格中,不考虑维护性、效率问题,只在于给予大家思路,对于“超链接”控件等都可用类似的方法处理,类似网址如下:
https://bbs.csdn.net/topics/340208660
在网上发行另一种方式,思路差不多,地址我也贴出来:
https://blog.csdn.net/linzi1015910507/article/details/52595863
关于第三方DevExpress组件上的网格如GridView等,本人并没有找到好的解决上面问题的方法,有不足之处,知情人事可在留言板上赐教。
A young idler ~ an old beggar !
DataGridView的单元格如何嵌入多个按钮控件的更多相关文章
- WinForm中DataGridView验证单元格输入的是数字
转载:http://www.cnblogs.com/ganqiyin/archive/2013/02/18/2915491.html 事件:DataGridView验证单元格输入的是数字,DataGr ...
- 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件
“/”应用程序中的服务器错误. 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“c552ea94-6fbb-11d5-a9c1-00104bb6fc1c”. 说明: 执行当前 Web ...
- DataGridView 的单元格的边框、 网格线样式的设定【转】
1) DataGridView 的边框线样式的设定DataGridView 的边框线的样式是通过 DataGridView.BorderStyle 属性来设定的. BorderStyle 属性设定值是 ...
- DataGridView合并单元格
昨天一个同事问我DataGridView单元格合并的问题,一开始按照我的设想是算出两个单元格的Rectangle,然后直接使用e.Graphics.FillRectangle(backColorBru ...
- DataGridView的单元格控制只能输入数字
主要是应用DataGridView的EditingControlShowing事件.当单元格进入编辑模式时,可以处理执行该编辑控件的自定义初始化的此事件. public DataGridViewTex ...
- 如何通过DataGridView 实现单元格合并和二维表头
先看下实现出来的效果(这里随便写了几组数据,用来测试) 先初始一个DataGridView 设置哪几列 DataGridView 里男女这两列的 AutoSizeMode 可以设置Fill. publ ...
- DataGridView合并单元格(多行多列合并)
一.点击在拖入的显示控件(TreeList)右上方的箭头,在Treelist任务中选择数据源,添加项目数据源,依次选择数据库.数据集,新建连接,浏览选择数据库(*.mdb),依次点击 下一步,选择“表 ...
- DataGridView合并单元格(一列或一行)
#region"合并单元格的测试(一列或一行)" // int?是搜索一种类型(可空类型),普通的int不能为null,而用int?,其值可以为null //private int ...
- DataGridView 的单元格的边框、 网格线样式的设定
1) DataGridView 的边框线样式的设定DataGridView 的边框线的样式是通过 DataGridView.BorderStyle 属性来设定的. BorderStyle 属性设定值是 ...
随机推荐
- tensorflow 1.0 学习:用CNN进行图像分类
tensorflow升级到1.0之后,增加了一些高级模块: 如tf.layers, tf.metrics, 和tf.losses,使得代码稍微有些简化. 任务:花卉分类 版本:tensorflow 1 ...
- Java垃圾回收(GC)机制详解
一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 二. ...
- 浅谈canvas中的拖尾效果
引言 很早就想了解以下 canvas 中的拖尾效果(如彗星,烟花等效果)是怎么实现的,但是一直没有深入了解,正巧在 codepen 上看到一个 demo,代码简单,效果炫酷,故有此文. 什么黑科技 在 ...
- Java工程师修炼之路(从小白到BAT的两年学习历程)
作者:陆小凤 文章首发于:微信公众号[程序员江湖] 前言 在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾 ...
- 读写锁ReentrantReadWriteLock:读读共享,读写互斥,写写互斥
介绍 DK1.5之后,提供了读写锁ReentrantReadWriteLock,读写锁维护了一对锁:一个读锁,一个写锁.通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升.在读多写少的情况下, ...
- Hibernate学习(九)———— 二级缓存和事务级别详讲
序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人 ...
- 五种IO模型透彻分析
1.基础 在引入IO模型前,先对io等待时某一段数据的"经历"做一番解释.如图: 当某个程序或已存在的进程/线程(后文将不加区分的只认为是进程)需要某段数据时,它只能在用户空间中属 ...
- (3)编译安装lamp三部曲之php-技术流ken
简介 php是服务器端脚本语言,我们需要使用它来提供动态的网页.接下来就来编译安装php吧. 系统环境及服务版本 centos7.5 服务器IP:172.20.10.7/28 libmcrypt-de ...
- Js中的提升
Js的执行并不是由上向下一行一行顺序下来的,一个例子如下: a = 2; var a ; console.log(a) 输出的是2,这区别于别的语言. 再一个例子: console.log(a); / ...
- WPF 水平进度条
WPF设计界面过程中,有时需要设计一种可以手动滑动修改并实时显示的进度条 进度条,效果如下: 颜色.图标.节点什么的,都可以重新替换. 前端XAML代码: <UserControl x:Clas ...