场景

鼠标点击DataGridView的某个单元格时,此单元格添加一个自定义的控件,这里以

添加下拉框为例

效果

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

在设计器页面,找到DataGridView的单元格点击事件CellClick,然后双击进入其点击事件中

private void dataGridView_Task_ViewEdit_CellClick(object sender, DataGridViewCellEventArgs e)
{
//获取当前点击的列的index
int currentColumnindex = dataGridView_Task_ViewEdit.CurrentCell.ColumnIndex;
//获取当前行的index
int currentRowindex = dataGridView_Task_ViewEdit.CurrentCell.RowIndex;
switch (currentColumnindex)
{
case :
//第三列-控制模式
Cell2Click(currentColumnindex,currentRowindex);
break;
case :
//第四列-跳转条件
break;
case :
//第五列-记录条件
break;
case :
//第六列-电流量程
break;
default:
break;
}
}

然后在通过当前列的Index判断是那一列,再执行具体的操作,添加不同的控件。

这里操作第三列,然后执行方法Cell2Click,并将当前行与列的index传递。

private void Cell2Click(int currentColumnindex, int currentRowindex)
{
//下拉框控件
DevExpress.XtraEditors.ComboBoxEdit comboBox = new DevExpress.XtraEditors.ComboBoxEdit(); //添加ComboBox
comboBox.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 / ), rect.Height);
//位置设置
comboBox.Location = new Point(rect.Left, rect.Top); //根据配置文件获取下拉框items选项
int i=;
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>)
{
for (int i = ; i < controlCount; i++)
{
//删除第三个之后的控件,删除后索引减1 所以循环删除第四个控件
this.dataGridView_Task_ViewEdit.Controls.RemoveAt();
}
}
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 / ) + Global.CONTROL_DISTANCE, rect.Height);
//位置设置
textEdit.Location = new Point(rect.Left + (rect.Width / ), 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 / ) + (rect.Width / ) + Global.CONTROL_DISTANCE * , 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. Easyui之datagrid实现点击单元格修改单元格背景颜色

    前段时间有个需求中有点击datagrid的单元格实现某种事件,调用datagrid的onclickCell这个方法很容易实现,但是体验不好啊,完全不知道自己刚才点击的是哪个单元格,然后就尝试单击单元格 ...

  3. dev gridview指定单元格cell获取坐标

    DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo Info2 = gvQueryResult.GetViewInfo() as DevExpre ...

  4. DataGridView获取或者设置当前单元格的内容

    当前单元格指的是DataGridView焦点所在的单元格,它可以通过DataGridView对象的CurrentCell属性取得.如果当前单元格不存在的时候,返回null. 取得当前单元格的内容: o ...

  5. GridView控件点击单元格如何获取该列的列标题

    本博文Insus.NET教你实现在GridView控件中,用mouse点击某单元格之后,希望能获取到该列的列标题. 创建一个网页,创建一个GridView控件: 去cs绑定数据给GridView控件: ...

  6. jxl获取excel中的合并的单元格(主要是方法介绍)

    Range[] rangeCells = sheet.getMergedCells();// 返回sheet中合并的单元格数组 for (Range r : rangeCells) {//对数组遍历拿 ...

  7. Office EXCEL 中如何让一个单元格的数据链接到另一个工作表的数据

    比如我在Sheet2中定义了几个数据,这些都是简单的数字,而在Sheet1中让要被绑定的单元格等于Sheet2的对应单元格地址(比如Sheet2!B1,Sheet2!B2之类的)   然后就可以一改全 ...

  8. EXCEL中对1个单元格中多个数字求和

    如A1=3779.3759.3769.3781.3750,A2对A1中4个数字求和怎么求!请高手赐教! 方法一:在B1中输入公式=SUM(MID(A1,{1,6,11,16,21},4)*1) 方法二 ...

  9. react ,ant Design UI中table组件合并单元格并展开详情的问题

    需求:购物车订单列表,如图: 一:单元格合并 遇到这种你会怎么办呢?  单元格合并?  还是其他的方法? 下面是我的处理方式,就是在table 组件的columns上处理,这里拿商品举例,其余的类似, ...

随机推荐

  1. Mysql的旧版本下载地址

    直接进入:http://downloads.mysql.com/archives/community/

  2. 常用类-excel转csv

    public class ExcelFileHelper { public static bool SaveAsCsv(string excelFilePath, string destination ...

  3. 爬虫selenium中动作链接ActionChains

    一.基本语法 生成一个动作actions=ActionChains(driver) 动作添加方法actions.方法 执行 actions.perform() 二.方法列表 click(on_elem ...

  4. scrapy实例:爬取天气、气温等

    1.创建项目 scrapy startproject weather # weather是项目名称 scrapy crawl spidername开始运行,程序自动使用start_urls构造Requ ...

  5. python 部署lvs

    import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ...

  6. 监控redis命令 - monitor

    有时候我们需要知道客户端对redis服务端做了哪些命令操作.我们可以试用monitor命令来查看.它能清楚的看到客户端在什么时间点执行了那些命令. MONITOR 是一个调试命令,每个命令流回来的re ...

  7. jira问题更改项目

    1.点击“问题”在问题中,筛选你要修改的问题,以下是以创建用户为搜索条件,然后点击“工具”---移动所有问题 2.选择要移动的问题,选择项目,进行移动

  8. RabbitMQ学习笔记(五、RabbitMQ集群)

    目录: RabbitMQ集群 镜像队列 RabbitMQ服务日志 RabbitMQ分布式部署 高可用集群 RabbitMQ集群: 1.集群中组件的状态 首先MQ一定要是一个高可用的中间件所以集群肯定是 ...

  9. 201871010101-陈来弟《面向对象程序设计(java)》第一周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...

  10. AHOI 2009 维护序列

    洛谷 P2023 [AHOI2009]维护序列 洛谷传送门 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式 ...