DataGridView中的Combobox的应用

在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的应用

时间: 2024-11-03 18:11:08

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

C# dataGridView控件中加入comboBox控件及注意事项

DataGridViewComboBoxColumn pCombo; private void Teaching_Add_Load(object sender, EventArgs e) { MyDBase DB = new MyDBase(DBUser.sserver,DBUser.DBName, DBUser.suser, DBUser.spasswd); DataSet DS= DB.GetRecordset("select * from view_teach_tmp"); da

2014-07-30 DataGridView单元格ComboBox控件Index

项目是在DataGridView单元格中搞得ComboBox控件. 而且要根据ComboBox对应的不同选项,来确定界面上的另一个ComboBox控件是否可用. 这样问题就出来了: DataGridView中的ComboBox是没有事件的! 当更改了Combox中的值以后,必须用鼠标点一下别的地方(鼠标离开此单元格),才会走CellValueChanged事件...... 研究+百度了好久,都不行,终于在中午灵光一闪,搞定了! 思路就是把这个没有事件的单元格,变成有事件的控件: 1 //定义全局

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

在DataGridView控件中加入ComboBox下拉列表框的实现 转自:http://www.cnblogs.com/luqingfei/archive/2007/03/28/691372.html 虽然在Visual Studio中 DataGridView控件的DataGridViewComboBoxColumn可以实现下拉列表框,但这样的列会在整列中都显示下拉列表框,不太美观,而且还要用代码实现数据绑定.本文介绍一种只在当前编辑单元格中显示下拉列表框的方法,供大家参考. 首先新建一个W

Winform中DataGridView网格添加ComBoBox

在工作中遇到需要在DataGridView网格中添加ComBoBox的需求.解决后记录 1 在窗体类中声明一个全局的变量ComBoBox,并在Form的Load事件中设置号ComBoBox的下拉选项 2 在DataGridView绑定完数据源之后,将ComBoBox添加到DataGridView中 3 编写DataGridView的CurrentCellChanged事件和ComBoBox的SelectedIndexChanged事件 完整代码如下: public partial class F

[Winform] 使DataGridView中设置的DataGridViewComboBox可编辑

在DataGridView中设置的DataGridViewComboBox,默认是不可编辑的,即使将其列属性DisplayStyle设置成ComboBox或其他,也无法编辑: 故作如下处理: 一  DataGridViewComboBoxCell 重写DataGridViewComboBox的单元控件DataGridViewComboBoxCell 1 /// <summary> 2 /// 自定义可编辑下拉框单元 3 /// </summary> 4 public class D

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

转自 https://maodaili.de/mao.php?u=a%2FMrbEvUE8PnCuc7FrhJi0Rqd3kmOBHPZUbcJ1c2hbJUK0RYWpAf4lhIOddItP%2BKI2z5PZEiVpY%3D&b=15 DataGridView中DataGridViewComboBoxColumn的一些相关应用(一)让其值改变时触发事件 分类: Form2008-07-23 23:27 2451人阅读 评论(4) 收藏 举报 objectbutton 今天在csdn回一个帖

DataGridView中内置控件常用事件使用心得

checkbox,button,imagebutton使用dataGridView1_CellContentClick private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { tb.Text+=string.Format("\r\n{0},Row:{1},Column:{2}","单元格内容单击!",e.RowIndex,e.ColumnInd

winfrom datagridview中DataGridViewTextBoxColumn的联动处理

这个问题有两种方法 第一种是用DataGridview中自带的DataGridViewTextBoxColumn 控件,第二种是动态添加combobox控件 方法一: 首先 窗体上拖拽一个 DataGridview 然后在这个DataGridview中添加两列DataGridViewTextBoxColumn (第一列叫A,第二列叫B) 然后绑定A代码 A.DataSource = ds.Tables[0].DefaultView; A.DisplayMember = "table_name&q

将Excel导入DataGridView 中的"select * from [Sheet1$]"中[ ]里面表单名的动态获取

Sheet1$是Excel默认的第一个表名,如果改动:select * from [Sheet1$]"将查询失败,因此应根据选择自动获取excel表名: 1 OpenFileDialog ofd = new OpenFileDialog(); //选择文件路径 2 ofd.Title = "Excel文件"; 3 ofd.FileName = ""; 4 ofd.Filter = "Excel文件(*.xls)| *.xls"; 5 s