DataGridView中实现点击单元格Cell动态添加自定义控件
场景
鼠标点击DataGridView的某个单元格时,此单元格添加一个自定义的控件,这里以
添加下拉框为例
效果
注:
博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
在设计器页面,找到DataGridView的单元格点击事件CellClick,然后双击进入其点击事件中
private void dataGridView_Task_ViewEdit_CellClick(object sender, DataGridViewCellEventArgs e){//获取当前点击的列的indexint currentColumnindex = dataGridView_Task_ViewEdit.CurrentCell.ColumnIndex;//获取当前行的indexint currentRowindex = dataGridView_Task_ViewEdit.CurrentCell.RowIndex;switch (currentColumnindex){case 2://第三列-控制模式Cell2Click(currentColumnindex,currentRowindex);break;case 3://第四列-跳转条件break;case 4://第五列-记录条件break;case 5://第六列-电流量程break;default:break;}}
然后在通过当前列的Index判断是那一列,再执行具体的操作,添加不同的控件。
这里操作第三列,然后执行方法Cell2Click,并将当前行与列的index传递。
private void Cell2Click(int currentColumnindex, int currentRowindex){//下拉框控件DevExpress.XtraEditors.ComboBoxEdit comboBox = new DevExpress.XtraEditors.ComboBoxEdit(); //添加ComboBoxcomboBox.Name = "ControlModel_ComBox";ComboBoxItemCollection coll = comboBox.Properties.Items;//添加this.dataGridView_Task_ViewEdit.Controls.Add(comboBox);//获取当前单元格的内容string currentCellValue = this.dataGridView_Task_ViewEdit.Rows[currentRowindex].Cells[currentColumnindex].Value.ToString();//清空单元格内容this.dataGridView_Task_ViewEdit.Rows[currentRowindex].Cells[currentColumnindex].Value = String.Empty;//获取大小Rectangle rect = dataGridView_Task_ViewEdit.GetCellDisplayRectangle(currentColumnindex, currentRowindex, true);//大小设置comboBox.Size = new Size((rect.Width / 3), rect.Height);//位置设置comboBox.Location = new Point(rect.Left, rect.Top);//根据配置文件获取下拉框items选项int i=0;List<ControlModelItem> controlModelItems = TaskViewEditHelper.GetComboBoxItems(System.IO.Path.Combine(Global.AppConfig.SysConfigPath, Global.CONTROL_MODEL_ITEMS_FILE_PATH));foreach(ControlModelItem controlModelItem in controlModelItems){coll.Add(controlModelItem);if (controlModelItem.Value == currentCellValue)comboBox.SelectedIndex = i;i++;}//通过下面可以获取选中项的内容if (comboBox.SelectedItem != null){string key = (comboBox.SelectedItem as ControlModelItem).Key;string value = (comboBox.SelectedItem as ControlModelItem).Value;}//绑定事件--控制模式下拉框选项改变comboBox.SelectedValueChanged += comboBox_SelectedValueChanged;}
这里是添加了一个DevExpress的下拉框控件ComboBoxEdit控件,并添加下拉框选项,然后绑定下拉框内容改变的事件comboBox_SelectedValueChanged。
同理在改变下拉框选项的事件中在分别实现添加控件
private void comboBox_SelectedValueChanged(object sender, EventArgs e){int controlCount = this.dataGridView_Task_ViewEdit.Controls.Count;//初始化会有三个控件if (controlCount>3){for (int i = 3; i < controlCount; i++){//删除第三个之后的控件,删除后索引减1 所以循环删除第四个控件this.dataGridView_Task_ViewEdit.Controls.RemoveAt(3);}}DevExpress.XtraEditors.ComboBoxEdit comboBox = sender as ComboBoxEdit;ControlModelItem controlModelItem = comboBox.SelectedItem as ControlModelItem;string controlModelItemkey = controlModelItem.Key;switch (controlModelItemkey){//恒压case "ConstantVoltage":int currentColumnindex = dataGridView_Task_ViewEdit.CurrentCell.ColumnIndex;int currentRowindex = dataGridView_Task_ViewEdit.CurrentCell.RowIndex;TextEdit textEdit = new TextEdit();textEdit.Name = "ControlMode_ConstantVoltage_textEdit";this.dataGridView_Task_ViewEdit.Controls.Add(textEdit);//获取大小Rectangle rect = dataGridView_Task_ViewEdit.GetCellDisplayRectangle(currentColumnindex, currentRowindex, true);//大小设置textEdit.Size = new Size((rect.Width / 6) + Global.CONTROL_DISTANCE, rect.Height);//位置设置textEdit.Location = new Point(rect.Left + (rect.Width / 3), rect.Top);LabelControl label = new LabelControl();label.Name = "ControlMode_ConstantVoltage_label";this.dataGridView_Task_ViewEdit.Controls.Add(label);label.Text = "V";//位置设置label.Location = new Point(rect.Left + (rect.Width / 3) + (rect.Width / 6) + Global.CONTROL_DISTANCE * 2, rect.Top + Global.LABEL_FROM_TOP_DISTANCE);break;case "Shelve":break;case "ConstantCurrent":break;case "ConstantPower":break;case "ConstantLoad":break;case "Cycle":break;case "CurrentSlope":break;case "CurrentLadder":break;case "ConstantVoltageLimitCurrent":break;case "CurrentPulse":break;case "WorkingConditionSimulation":break;case "PowerRamp":break;case "PowerLadder":break;default:break;}}
DataGridView中实现点击单元格Cell动态添加自定义控件相关推荐
- C# 在DataGridView中,点击单元格调出 TreeView控件 或 ListBox控件
1.调出 TreeView控件 或 ListBox控件 private void deductGrid1_CellClick(object sender, DataGridViewCellEvent ...
- poi 合并单元格添加边框_如何在Excel中的文本和单元格边框之间添加空间
poi 合并单元格添加边框 Adding a bit of extra padding to your cell boundaries can make it easier for you to re ...
- Excel中VBA编程学习笔记(十)--单元格(cell)
1.单元格引用 引用 含义 Range("A1") 单元格A1 Range("A1:B2") A1到B2的单元格区域 Range("C5:D9,G9: ...
- el-table 点击单元格可编辑 点击表头可修改 右击表头删除表头和内容
项目场景: 提示:这里简述项目相关背景: 点击单元格可编辑 点击表头可修改表头内容 .右击表头删除内容和表头 代码 html <template><div class="a ...
- vba模拟鼠标点击_核对数据总看错,试试这个方法,点击单元格自动为整行填充颜色...
Hello,大家好,今天跟大家分享我们如何实现实现点击一个单元格,自动为数据区域的整行填充一个颜色,效果如下图,当我们点击一个单元格的时候们就会为整行填充一个颜色,这个的操作跟我们之前分享的聚光灯效果 ...
- VBA实现为Excel中自定义名称的单元格添加批注
一.本地office中通过创建宏实现此需求 1.打开一个Excel文件,在需要插入批注的单元格右击-定义名称(myTable1).点击菜单栏-视图-宏-查看宏-输入宏名-创建宏 2.进入VBA编辑 ...
- 如何在EXCEL中查找多个单元格中的多个关键字,多个单元格满足多个条件的行的绿色在线工具
Excel查找,偶尔有情况遇到要在Excel中查找多个单元格的多个关键字(或包含或相等),或多个单元格或列满足多个的条件的行,Excel本身的支撑没有那么灵活.本身我们又对代码不熟悉,有一个方便性的工 ...
- java 单元格拆分合并_java – 在Excel中查找合并的单元格,拆分单元格并将其写入新的电子表格中?...
我得到了一个分配,我需要拆分电子表格的数据并将其写入新的电子表格.条件是,给定电子表格可能有多个合并单元格数,我需要找到那些合并单元格并在新的SpreadSheet中写入这些数据. 即,必须在另一个电 ...
- Python中xlrd操作excel单元格
学习目标 Python中xlrd操作excel单元格 学习内容 1.获取工作表 sheet=data.sheet_by_index(0) 2.返回单元格对象 sheet.cell(1,2) #返回第二 ...
最新文章
- linux批处理mysql数据库_使用批处理对MySQL进行数据批量操作
- 测试工具–super-mack
- Jquery中post与get之间的区别详细介绍
- 漫谈 Linux,Windows 和 Mac
- 83-spark2.2的DataFrame使用以及以前版本SqlContext的隐式引用
- 预报有雷雨,阴天了。
- Warning: 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/' already解决
- 【项目】ARX程序开发:框裁直线(Rect Trim Line)功能开发
- DeepStream中,获得并修改识别对象参数的代码
- Golang中MYSQL驱动
- odis工程师使用教程_大众奥迪工程师软件ODIS-E车型代码说明大全完整版
- HDAO 全新项目落地,带动区块链新一轮牛市
- [生存志] 第11节 历代大事件概览 春秋
- 金庸武侠内功排行榜TOP10
- 云计算的三种服务模式的讲解
- 深扒联易融招股书:毛利率高、研发占比低,近三年合计亏约30亿
- CSS 第007篇 字体font
- 如何清理占用计算机内存,告诉你如何深度清理电脑内存
- 香精大米”真的“香”吗?
- (五)、马尔科夫预测模型
热门文章
- 正则判断是否有html标签,正则表达式匹配所有HTML标签,除了和
- springmvc工作流程详解_软装设计师工作流程详解
- Lambda使用——JDK8新特性
- SpringBoot笔记:SpringBoot2.3集成Kafka组件配置
- java jdk安装失败 mac_Mac javaJDK安装遇到的坑和环境变量配置2019-07-09.
- java 操作 ldap_JAVA操作LDAP总结
- linux wireshark_WireShark使用教程
- error: C3861: “pcap_open”: 找不到标识符
- c++ 截取\r\n问题
- mysql临时表好处和坏处_mysql临时表产生的执行效率问题改进(转)