【问题标题】:C# Datagridview: get selected item in combobox columnsC# Datagridview:获取组合框列中的选定项
【发布时间】:2011-08-28 09:35:20
【问题描述】:

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

我有一个“保存组合框列”可以将其更新为 xml,还有一个“保存”按钮可以保存到用户选择的目标位置。

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

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

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

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

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

此致,

tf.rz

【问题讨论】:

标签: c# windows combobox selecteditem


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回答 MAW!我希望我能想到类似的东西,但是当我访问单元格时,尽管它是一个组合框,但它本身没有 .text 函数!
【解决方案2】:

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

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

但是,您提到 Cell.Value 对您来说是空的。那么根据以下文章(How to: Access Objects in a Windows Forms DataGridViewComboBoxCell Drop-Down List),您可能还缺少另一个步骤。

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

【讨论】:

  • 您好彼得,感谢您的回复!我确实忘记设置一个值成员,但我不太了解业务对象是什么。如何将 valuemember 设置为属性以某种方式设置单元格值?我尝试模仿您发布的文章,但单元格值仍然为空,所以我认为我很可能做错了。 =(
  • 尝试将 ValueMember 设置为您的 XML 元素的名称,例如“姓名”。或者,尝试将 DataPropertyName 也设置为“名称”。
【解决方案3】:

如果我们将datagridcomboboxcell 与不同的DisplayMemberValueMember 绑定,如下所示:

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

那么为了得到SelectedText,和SelectedValue,我们可以这样写代码:

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

希望它能解决你的问题。

【讨论】:

    【解决方案4】:

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

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

    不要忘记为您的 DataGridViewComboBoxColumn 设置 DisplayMemberValueMember

    【讨论】:

      【解决方案5】:

      这是怎么做的

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

      【讨论】:

        【解决方案6】:

        我用这个:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多