C# Datagridview:获取组合框列中的选定项目

问题描述 投票:0回答:7

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

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

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

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

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

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

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

真诚的,

tf.rz

c# windows combobox selecteditem
7个回答
12
投票

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

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

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

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


4
投票

如果我们将

datagridcomboboxcell
与不同的
DisplayMember
ValueMember
绑定,如下所示:

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

希望它能解决您的问题。


1
投票

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

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

不要忘记为 DataGridViewComboBoxColumn 设置

DisplayMember
ValueMember


1
投票

原来是这样的

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

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

1
投票

我用这个:

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

0
投票

.Net 组合框实际上是一个由文本框和下拉列表组成的复合控件。使用

box.Text
获取当前显示的信息。

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

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

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


0
投票

我的首选解决方案是将控件转换为普通组合框,之后selecteditem、selectedvalue等都可用。在 vb.net 中,其中 dgvSchedule 是我的 datagridview:

    Private Sub dgvschedule_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dgvSchedule.EditingControlShowing

    cbx = TryCast(e.Control, ComboBox) ' Key line to manage the Datagridviewcombobox as a combobox.
© www.soinside.com 2019 - 2024. All rights reserved.