场景

鼠标点击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动态添加自定义控件相关推荐

  1. C# 在DataGridView中,点击单元格调出 TreeView控件 或 ListBox控件

    1.调出 TreeView控件 或  ListBox控件 private void deductGrid1_CellClick(object sender, DataGridViewCellEvent ...

  2. poi 合并单元格添加边框_如何在Excel中的文本和单元格边框之间添加空间

    poi 合并单元格添加边框 Adding a bit of extra padding to your cell boundaries can make it easier for you to re ...

  3. Excel中VBA编程学习笔记(十)--单元格(cell)

    1.单元格引用 引用 含义 Range("A1") 单元格A1 Range("A1:B2") A1到B2的单元格区域 Range("C5:D9,G9: ...

  4. el-table 点击单元格可编辑 点击表头可修改 右击表头删除表头和内容

    项目场景: 提示:这里简述项目相关背景: 点击单元格可编辑 点击表头可修改表头内容 .右击表头删除内容和表头 代码 html <template><div class="a ...

  5. vba模拟鼠标点击_核对数据总看错,试试这个方法,点击单元格自动为整行填充颜色...

    Hello,大家好,今天跟大家分享我们如何实现实现点击一个单元格,自动为数据区域的整行填充一个颜色,效果如下图,当我们点击一个单元格的时候们就会为整行填充一个颜色,这个的操作跟我们之前分享的聚光灯效果 ...

  6. VBA实现为Excel中自定义名称的单元格添加批注

    一.本地office中通过创建宏实现此需求 1.打开一个Excel文件,在需要插入批注的单元格右击-定义名称(myTable1).点击菜单栏-视图-宏-查看宏-输入宏名-创建宏 ​ 2.进入VBA编辑 ...

  7. 如何在EXCEL中查找多个单元格中的多个关键字,多个单元格满足多个条件的行的绿色在线工具

    Excel查找,偶尔有情况遇到要在Excel中查找多个单元格的多个关键字(或包含或相等),或多个单元格或列满足多个的条件的行,Excel本身的支撑没有那么灵活.本身我们又对代码不熟悉,有一个方便性的工 ...

  8. java 单元格拆分合并_java – 在Excel中查找合并的单元格,拆分单元格并将其写入新的电子表格中?...

    我得到了一个分配,我需要拆分电子表格的数据并将其写入新的电子表格.条件是,给定电子表格可能有多个合并单元格数,我需要找到那些合并单元格并在新的SpreadSheet中写入这些数据. 即,必须在另一个电 ...

  9. Python中xlrd操作excel单元格

    学习目标 Python中xlrd操作excel单元格 学习内容 1.获取工作表 sheet=data.sheet_by_index(0) 2.返回单元格对象 sheet.cell(1,2) #返回第二 ...

最新文章

  1. linux批处理mysql数据库_使用批处理对MySQL进行数据批量操作
  2. 测试工具–super-mack
  3. Jquery中post与get之间的区别详细介绍
  4. 漫谈 Linux,Windows 和 Mac
  5. 83-spark2.2的DataFrame使用以及以前版本SqlContext的隐式引用
  6. 预报有雷雨,阴天了。
  7. Warning: 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/' already解决
  8. 【项目】ARX程序开发:框裁直线(Rect Trim Line)功能开发
  9. DeepStream中,获得并修改识别对象参数的代码
  10. Golang中MYSQL驱动
  11. odis工程师使用教程_大众奥迪工程师软件ODIS-E车型代码说明大全完整版
  12. HDAO 全新项目落地,带动区块链新一轮牛市
  13. [生存志] 第11节 历代大事件概览 春秋
  14. 金庸武侠内功排行榜TOP10
  15. 云计算的三种服务模式的讲解
  16. 深扒联易融招股书:毛利率高、研发占比低,近三年合计亏约30亿
  17. CSS 第007篇 字体font
  18. 如何清理占用计算机内存,告诉你如何深度清理电脑内存
  19. 香精大米”真的“香”吗?
  20. (五)、马尔科夫预测模型

热门文章

  1. 正则判断是否有html标签,正则表达式匹配所有HTML标签,除了和
  2. springmvc工作流程详解_软装设计师工作流程详解
  3. Lambda使用——JDK8新特性
  4. SpringBoot笔记:SpringBoot2.3集成Kafka组件配置
  5. java jdk安装失败 mac_Mac javaJDK安装遇到的坑和环境变量配置2019-07-09.
  6. java 操作 ldap_JAVA操作LDAP总结
  7. linux wireshark_WireShark使用教程
  8. error: C3861: “pcap_open”: 找不到标识符
  9. c++ 截取\r\n问题
  10. mysql临时表好处和坏处_mysql临时表产生的执行效率问题改进(转)