2011-05-18 76 views
2

我正在开发一个允许用户操纵xml文件的GUI。我在通过xml元素的列整齐排列的datagridview中显示xml文件。我允许用户在我的项目中添加列作为扩展。该列被添加到数据集表中,然后更新到我用来显示xml文件的datagridveiew中。我已经包含了用户添加组合框以选择选项而不是不断输入它们的功能。对或错。然而,这是问题所在。保存一个正常的列很容易。组合框列是一个痛苦。C#Datagridview:获取组合框中的选定项目

我有一个“保存组合框”,让它更新到XML和一个“保存”按钮,以保存在用户选择的目的地。

我已经做了一些研究,看起来组合框类有这样一个功能,可以访问用户输入的组合框中的selecteditem。 我们有:

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

我试图将其应用到组合框列类,但它不具有这样的功能。因此,我无法弄清楚如何直接获得用户所选项目的价值。我也尝试过用comboboxcell做实验,但是这并没有引导我到任何地方。我玩过的那些课程都没有......“选择项目”功能,甚至Google也没有解决方案。 =(我也尝试过使用cell.value,但由于某些原因它为“null”,即使用户在方框中选择了一个项目,它也不会保存到单元格的值中。 : 我的问题简而言之是,如果可能的话,您是否可以访问组合框单元格的选定项目?此外,如何确保项目值保存在单元格中?

在此先感谢。 “M使用.NET 3.5 SP1,通过Visual Studio 2008 C#。

此致

tf.rz

+0

相关信息['如何获得Datagridview Combobox选定项目的文本?'](http://stackoverflow.com/q/13418354/1577396) – 2012-11-22 04:32:30

回答

11

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

与ComboBox控件不同,DataGridViewComboBoxCell没有SelectedIndex和SelectedValue属性。相反,从下拉列表中选择一个值可以设置单元格的Value属性。

但是,您提到Cell.Value对您而言为空。那么有可能是你按照下面的文章http://msdn.microsoft.com/en-us/library/ms404353(v=VS.90).aspx

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

+0

你好,彼得谢谢你的回复!我确实忘了设置一个值成员,但我不太明白业务对象是什么。如何将valuemember设置为属性以某种方式设置单元格值?我尝试模仿你发布的文章,但单元格值仍然为空,所以我认为我很可能做错了。 =( – 2011-05-18 21:29:40

+0

尝试将ValueMember设置为XML元素的名称,例如“Name”。或者,也可以尝试将DataPropertyName设置为“Name”。 – 2011-05-18 21:54:45

0

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

编辑:行或单元格应该有一个.FindControl()方法。你需要做的是这样:

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

基本上,你发现它的容器(行或单元)内的控制,然后浇铸发现作为一个组合框控件,然后访问它。文本属性。

+0

感谢您的回答MAW!我希望我曾经想过类似的东西,但是当我访问单元格时,尽管它是一个组合框,但它没有.text功能! – 2011-05-18 21:25:46

+0

@ tf.rz - 见编辑。 – MAW74656 2011-05-19 14:04:13

2

如果我们结合一个datagridcomboboxcell具有不同DisplayMemberValueMember,像这样:

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); 

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

1

使用此获取或设置所选值:

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

不要忘记设置DisplayMemberValueMember您DataGridViewComboBoxColumn

1

这是它是如何做

DataGridViewComboBoxCell comboCell = (DataGridViewComboBoxCell)dgv.Rows[0].Cells[1]; 

    MessageBox.Show(""+comboCell.Items.IndexOf(comboCell.Value)); 
0

我使用这个:

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