繁体   English   中英

C#Datagridview:在组合框列中获取所选项目

[英]C# Datagridview: get selected item in combobox columns

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

我有一个“保存组合框列”以将其更新为xml和“保存”按钮以保存在用户选择的目的地中。

我做了一些研究,似乎组合框类具有这样的功能,可以访问用户输入的组合框中的选择项。 我们在哪里:

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

我尝试将它应用于组合框列类,但它没有这样的功能。 因此,我无法弄清楚如何直接获取用户所选项的值。 我也尝试过使用comboboxcell,但这并没有引导我到任何地方。 我玩的那些课程都没有...“选定项目”功能,甚至谷歌也没有我的解决方案。 =(我也尝试使用cell.value,但由于某种原因它是“null”。即使用户选择框中的项目,它也不会保存到单元格的值中。

TLDR:我的问题很简单,如果可能的话,您如何获得对comboboxcolumn单元格所选项目的访问权限? 此外,您如何确保项目值保存在单元格中?

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

此致

tf.rz

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

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

但是,您提到Cell.Value对您来说是空的。 根据以下文章( 如何:访问Windows窗体DataGridViewComboBoxCell下拉列表中的对象),可能还有另一个缺少的步骤。

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

如果我们将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);

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

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

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

不要忘记为DataGridViewComboBoxColumn设置DisplayMemberValueMember

这就是它的完成方式

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

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

我用这个:

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

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

编辑:行或单元格应该有.FindControl()方法。 你需要做的事情如下:

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

基本上,您在其容器(行或单元格)中找到控件,然后将控件发现为组合框,然后访问其.Text属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM