C#Datagridview:获取combobox列中的选定项目

我正在开发一个GUI,允许用户操纵XML文件。 我通过xml元素在整齐排列的datagridview中显示xml文件。 我允许用户在我的项目中添加列作为扩展。 该列被添加到数据集表,然后更新到datagridveiew,我用来显示xml文件英寸我已经包括用户添加一个combobox的能力来selectselect,而不是像经常input他们..对或错。 然而,这是问题所在。 保存一个正常的列很容易。 combobox列是一个痛苦。

我有一个“保存combobox”,将其更新到XML和“保存”button,以保存在用户select的目的地。

我已经做了一些研究,看起来combobox类有这样一个function,可以访问用户input的combobox中的selecteditem。 我们在哪里:

ComboBox box = new ComboBox(); box.SelectedItem; 

我试过把它应用到combobox的类,但它没有这样的function。 因此,我不知道如何直接获取用户select的项目的价值。 我也尝试过用comboboxcell做实验,但是那也没有引导我到任何地方。 我玩过的这两个类都没有…“select项目”function,甚至谷歌没有我的解决scheme。 =(我也尝试过使用cell.value,但由于某种原因,它是“null”,即使用户在框中select了一个项目,它也不会被保存到单元格的值中。

TLDR:我的问题简而言之,如果可能的话,您是如何获得组合列单元格的选定项目的? 另外,你如何确保项目值保存在单元格中?

提前致谢。 我正在使用.NET 3.5 SP1,通过Visual Studio 2008 C#。

此致

tf.rz

Solutions Collecting From Web of "C#Datagridview:获取combobox列中的选定项目"

DataGridView中的控件不是一个ComboBox,它是一个DataGridViewComboBox,具有不同的属性和方法。 来自MSDN

与ComboBox控件不同,DataGridViewComboBoxCell不具有SelectedIndex和SelectedValue属性。 而是从下拉列表中选择一个值来设置单元格的Value属性。

不过,你提到Cell.Value对你来说是空的。 那么根据以下文章http://msdn.microsoft.com/en-us/library/ms404353(v=VS.90).aspx可能还有其他一些步骤

您必须将DataGridViewComboBoxColumn.ValueMember或DataGridViewComboBoxCell.ValueMember属性设置为业务对象上属性的名称。 当用户进行选择时,业务对象的指示属性将设置单元格的“值”属性。

如果我们使用不同的DisplayMemberValueMember绑定了一个datagridcomboboxcell ,如下所示:

 dgcombocell.DisplayMember = "Name"; dgcombocell.ValueMember = "Id"; dgcombocell.DataSource = dataset1.Tables[0]; 

然后为了得到SelectedTextSelectedValue ,我们可以写这个代码:

 string SelectedText = Convert.ToString((DataGridView1.Rows[0].Cells["dgcombocell"] as DataGridViewComboBoxCell).FormattedValue.ToString()); int SelectedVal = Convert.ToInt32(DataGridView1.Rows[0].Cells["dgcombocell"].Value); 

我希望它能解决你的问题。

使用它来获取或设置选定的值:

 object selectedValue = currentRow.Cells["comboboxColumnName"].Value 

不要忘记为您的DataGridViewComboBoxColumn设置DisplayMemberValueMember

这是如何完成的

  DataGridViewComboBoxCell comboCell = (DataGridViewComboBoxCell)dgv.Rows[0].Cells[1]; MessageBox.Show(""+comboCell.Items.IndexOf(comboCell.Value)); 

.Net combox实际上是一个由文本框和下拉列表组成的复合控件。 使用box.Text获取当前显示的信息。

编辑:行或单元格应该有一个.FindControl()方法。 您需要执行以下操作:

Combobox box = (Combobox)(row.FindControl("[combobox ID]"));
string val = box.Text;

基本上,你在它的容器(行或单元格)中找到控件,然后将找到的控件转换为组合框,然后访问它的.Text属性。

我使用这个:

 private int GetDataGridViewComboBoxCellSelectedIndex(DataGridViewCell d) { return ((DataGridViewComboBoxCell)d).Items.IndexOf(d.Value); }