如何获取Datagridview Combobox所选项目的文本?

10

如何获取位于DataGridView中的Combobox选择项文本?我已尝试使用以下代码:

dataGridView1.Rows[1].Cells[1].Value.ToString()

但是,这只会返回与此单元格关联的值,而不是ComboBox所选项目的文本。 我还尝试了这个:


但是,这将返回与此单元格关联的值,而不是ComboBox所选的项目文本。 我还尝试了以下方法:
DataGridViewComboBoxCell cell = dataGridView1[1,1] as DataGridViewComboBoxCell;
string value = cell.Value.ToString();

但是,这也没有帮助。

我将感激您的帮助。提前致谢!

编辑:

假设我们有一个文本为NoYes,值分别为0和1的组合框。我想在组合框更改时获得YesNo的文本内容。但是使用上述代码获得的是值0/1。希望这能解决问题。

更新:

好的,所以我一直在解决这个问题,经过很多努力并得到我的同事的帮助,我已经能够解决问题并获得所需的解决方案:

以下是解决方案:

string SelectedText = Convert.ToString(dataGridView1.Rows[0].Cells[1].FormattedValue.ToString());

请查看此链接,并回复我。 - Mr_Green
正如@Mr_Green所说 - 不清楚你在寻找什么。您能否编辑问题以说明您的预期和实际结果? - Bobson
5个回答

17

尝试以下代码以获取DataGridView中ComboBox的选定值和选定文本

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

我认为在第一种情况下实际上不需要使用Convert.ToString(),因为您正在对FormattedValue调用.ToString()。虽然非常有用。 - Bobson
@Bobson Convert.ToString() 处理 null 值,如果我只写了 .Tostring(),且存在 null 值,则会在运行时引发异常。 :) - Rahul Rajput
1
这是一个非常好的观点。但这是否意味着.ToString()是多余的部分? - Bobson

4
我通过以下方法把字符串值从单元格中提取出来:
DataGridViewComboBoxCell dgvcmbcell = dataGridView1[1, 0] as DataGridViewComboBoxCell;
String text = dgvcmbcell.EditedFormattedValue.ToString();

最简单的方法是使用调试器并查看dgvcmdcell对象。在其中,您将找到可展开的节点“base”。展开它,只需浏览即可找到所需的任何信息。


感谢@Wozzec的回复,但是他提供的解决方案并没有达到我想要的效果。我的下拉框中有“是”和“否”两个选项。我能够获取到“是”的文本,但是当我将下拉框的值改为“否”时,它仍然显示为“是”,而不是应该选择的“否”。希望你能理解我的问题所在。 - palaѕн
你如何将项目添加到组合框中?我创建了一个包含文本和值变量的类。然后,我将组合框列设置为使用绑定源,该绑定源具有文本值类列表作为源。因此,当我更改组合框项目时,我会得到文本“否”。 - WozzeC
我正在将动态组合框列添加到网格中,并将其加载为DataTable中的项目列表数据。 - palaѕн
对我来说,这个代码按预期工作。只使用“FormatedValue”。ToString()(如Rahul Rajput所建议的)的解决方案总是返回一个空字符串。我使用“_Combobox.DataSource = list;”动态填充了我的组合框。“list”是一个字符串列表。 - Birk

1

也可以尝试这个:

DataGridView.CurrentRow.Cells(Column.name).EditedFormattedValue.ToString()
< p > EditedFormattedValue 对象提供了在 DataGridView 中单元格的当前格式化值,无论该单元格是否被编辑或处于编辑模式。更方便地捕获 ComboBox 选择或 DataGridView 中单元格的任何值。


0

要访问 datagridview 中当前选定的文本,您需要引用 Combobox 列的 CurrencyManagerCurrencyManager 与货币无关,而是管理列和其数据源之间的绑定。CurrencyManager 可以告诉您 combobox 的当前选择。

代码:

    CurrencyManager cm = (CurrencyManager)DataGridView1.BindingContext[((System.Windows.Forms.DataGridViewComboBoxColumn)DataGridView1.Columns[0]).DataSource];

注意:不必将列转换为组合框,我只是这样做是为了向您展示我传递的列。我使用了索引0,但请使用实际组合框列的索引。

现在,使用货币管理器,您可以访问数据网格的当前选择,因为那是您传递的列。

    cm.Current; //returns the current selection whatever that is

在我的情况下,组合框列的数据源是一个叫做Choice的类,Choice看起来像这样:
    public class Choice
    {
            public string Text
            {
                get;
                set;
            }
    }

当我访问cm.Current属性时,它将返回一个choice类的实例,现在我可以访问我的choice类的Text属性,以查看选择了什么值。显然,您必须根据自己的特定情况进行适应。我希望这能帮到你。

-1
你可以尝试这个:-
dataGridView1.CurrentRow.Cells[0].Value.ToString();

索引单元格所需查看的列,即您的ComboBoxColumn的索引。


这与 OP 已有的内容没有任何区别 - 他已经可以获得正确的单元格“值”。 - Bobson
是的,@Bobson,你说得完全正确。我已经得到了正确的单元格值。我只需要获取“组合框选择的文本”。 - palaѕн

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接