在WinForm中DataGridView可谓是应用比较多的数据显示控件了,DataGridView中可以应用各种控件,关于这样的文章网上

已有很多。都是实例化一个控件然后通过DataGridView.Controls.Add()方法绑定控件。然后通过特定的事伯执行数据绑定与操作。

这几天在做项目的时候也也用到的DataGridView控件,而且需要要DataGridView使用ComboBox来动态的显示数据。查了不少

的资料来完成DataGridView中的ComboBox的数据绑定,多数都是通过严设置在WinForm中的窗体InitializeComponent()中来设

置ComboBox对象的DataSource、DisplayMember、ValueMember的值来实现数据绑定,可是这样并不能实现每行不同的数据进

行绑定。在查看MSDN的时候我发现一个对象是DataGridViewComboBoxCell 。MSDN上这样说的:

DataGridViewComboBoxCell 类是用于显示组合框控件(即组合了列表选择字段的编辑字段)的 DataGridViewCell 的专用类型。

当前选定的 DataGridViewComboBoxCell 承载一个 DataGridViewComboBoxEditingControl,用户可在其中更改单元格的值

(假设单元格的 ReadOnly 属性设置为 false)。 与 ComboBox 控件不同,DataGridViewComboBoxCell 没有 SelectedIndex

和 SelectedValue 属性,而是通过从下拉列表中选择值来设置单元格的 Value 属性。

所以我这样实现的:

在DataGridView进行数据绑定时通过for来循环添加行(通过DataSource来实现的时候下的的功能无法完成),同时

DataGridViewComboBoxColumn列中填充Null。 然后在DataGridView的RowsAdded事件中添加ComboBox的数据绑定代码。


1       private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
2        {
3            
4            DataGridViewComboBoxCell DgvCell = this.dataGridView1.Rows[e.RowIndex].Cells[1] as DataGridViewComboBoxCell;
5            DgvCell.DataSource = DataSource;
6            DgvCell.DisplayMember = "MeasureName";
7            DgvCell.ValueMember = "MeasureId";
8         }

这样就可以完成数据绑定了。我们就可以在DataGridVie一行的后面添加一个按钮列,然后选择DataGridView的CellClick事件中编写代码。

我们可以通过

string selectValue =(string)(this.dataGridView1.Rows[e.RowIndex].Cells[1] as DataGridViewComboBoxCell).Value;//取得所选值的key即绑定ValueMember的值。
MessageBox.Show("" + selectValue.ToString() + "");

注意的地方就是如果绑定的的是泛型集合,那么DisplayMember与ValueMember的值必须是属性(property)

不可以是类的字段(Filed)。

DataGridView中的Combobox的应用的更多相关文章

  1. 在DataGridView控件中加入ComboBox下拉列表框的实现

    在DataGridView控件中加入ComboBox下拉列表框的实现 转自:http://www.cnblogs.com/luqingfei/archive/2007/03/28/691372.htm ...

  2. [WinForm] DataGridView 绑定 DT && ComboBox 列绑定 Dict

    一  需求介绍 一般像枚举类型的数据,我们在数据库里存储着诸如(1.2.3.4-)或者("001"."002"."003"-)此类,但是界面 ...

  3. [Winform] DataGridView 中 DataGridViewComboBox 的可编辑

    在 DataGridView 中设置的 DataGridViewComboBox,默认是不可编辑的,即使将其列属性 DisplayStyle 设置成 ComboBox 或其他,也无法编辑: 故作如下处 ...

  4. winfrom datagridview中DataGridViewTextBoxColumn的联动处理

    这个问题有两种方法 第一种是用DataGridview中自带的DataGridViewTextBoxColumn 控件,第二种是动态添加combobox控件 方法一: 首先 窗体上拖拽一个 DataG ...

  5. DataGridView中DataGridViewComboBoxColumn的一些相关应用(一)让其值改变时触发事件-转

    转自  https://maodaili.de/mao.php?u=a%2FMrbEvUE8PnCuc7FrhJi0Rqd3kmOBHPZUbcJ1c2hbJUK0RYWpAf4lhIOddItP%2 ...

  6. 在Datagridview中添加datagridviewComboBox列并显示下拉列表

    在DataGridView中自动的添加Column. private void button_autoAddColumn_Click(object sender, EventArgs e) { try ...

  7. 禁用datagridview中的自动排序功能

    把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...

  8. C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel

    其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(obj ...

  9. DataGridView中实现checkbox全选的自定义控件

    在DataGridView中实现Checkbox的全选的方法就是在列头画一个checkbox, 并给其一个事件. 这个之前很多blog都有写, 这里就不多废话了,  codeproject上面有示例代 ...

随机推荐

  1. JavaScript substr() 方法

    定义和用法 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符. 语法 stringObject.substr(start,length) 参数 描述 start 必需.要 ...

  2. 震惊,hexo个人博客居然有这么方便的评论系统

    论文搞得一头火,瞎倒腾了一下,没想到几分钟给自己的博客换了个评论系统. 之前用的gitalk,需要依赖github,死活没有成功,而且评论者还需要登录github才可以评论,不好用,刚才偶然间发现va ...

  3. Spring boot POST 提交错误 Request header is too large

    解决方法 application.yml server: # 单位 KB max-http-header-size: 100000 java.lang.IllegalArgumentException ...

  4. input标签type="file"上传文件的css样式

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. C 套接字

    套接字函数 1 创建套接字──socket() 应用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段,   其调用格式如下:SOCKET PASCAL ...

  6. eQTL | Expression quantitative trait loci | 表达数量性状基因座 | QTL | 数量性状位点

    到底什么是eQTL? eQTL和QTL之间有什么联系?为什么说QTL比eQTL难很多? QTL和GWAS有什么关系? GTEx数据库里的eQTL数据如何利用? 说eQTL之前必须先解释QTL,QTL, ...

  7. CMU Database Systems - Indexes

    这章主要描述索引,即通过什么样的数据结构可以更加快速的查询到数据 介绍Hash Tables,B+tree,SkipList 以及索引的并行访问 Hash Tables hash tables可以实现 ...

  8. python PIL/cv2/base64相互转换

    PIL和cv2是python中两个常用的图像处理库,PIL一般是anaconda自带的,cv2是opencv的python版本.base64在网络传输图片的时候经常用到. ##PIL读取.保存图片方法 ...

  9. flutter Form表单

    import 'package:flutter/material.dart'; class FormDemo extends StatelessWidget { @override Widget bu ...

  10. realsense SDK编译 release

    1>------ 已启动生成: 项目: ZERO_CHECK, 配置: Release x64 ------1> Checking Build System1> CMake does ...