如何获取 Datagridview Combobox 选定项的 TEXT?

Posted

技术标签:

【中文标题】如何获取 Datagridview Combobox 选定项的 TEXT?【英文标题】:How to get the TEXT of Datagridview Combobox selected item? 【发布时间】:2012-11-05 06:46:53 【问题描述】:

如何获取 DataGridView 内的 Combobox 选定项 text? 我试过使用下面的代码:

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

但是,这给出了与此单元格关联的值,而不是组合框选定项文本。 我也试过这个:

DataGridViewComboBoxCell cell = dataGridView1[1,1] as DataGridViewComboBoxCell;
string value = cell.Value.ToString();

但是,这也没有帮助。

感谢您的帮助。提前致谢!

编辑:

假设我们有一个 Combobox,其文本为 NoYes,值分别为 0 和 1。我想在这里得到的是文本YesNo,当组合框发生变化时。但我得到的是使用上述代码的值 0/1。希望这能让事情变得清楚。

更新:

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

解决办法如下:

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

【问题讨论】:

查看Link 并回复我.. 正如@Mr_Green 所说-尚不清楚您在寻找什么。您能否编辑问题以说明您的预期和实际结果是什么? 【参考方案1】:

要在 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 Convert.ToString() 处理空值,如果我只写 .Tostring() 并且有空值,它将在运行时引发异常。 :) 这是一个非常好的观点。但这是否意味着.ToString() 是冗余位?【参考方案2】:

我设法通过这种方式将该字符串值从单元格中提取出来:

DataGridViewComboBoxCell dgvcmbcell = dataGridView1[1, 0] as DataGridViewComboBoxCell;
String text = dgvcmbcell.EditedFormattedValue.ToString();

解决这个问题的最简单方法是使用调试器并查看 dgvcmdcell 对象。在此您将找到可扩展节点“base”。展开它并浏览它,您会找到所需的任何信息。

【讨论】:

感谢@Wozzec 的回复,但该解决方案并未如我所愿。我有是和否作为组合框中的文本。我能够获得 TEXT Yes,但是当我将组合框值更改为 No 时,它仍将值显示为 Yes,它应该是 No 作为选定项 TEXT。我希望你能明白我的问题所在。 如何将您的项目添加到组合框中?我创建了一个包含变量文本和值的类。然后,我将组合框列设置为使用带有 textvalue 类列表的 bindingsource 作为源。所以对我来说,当我更改组合框项目时,我得到了 TEXT "No"。 我正在将动态组合框列添加到网格中,并将 DataTable 中的数据作为项目列表加载。 对我来说这是按预期工作的。仅使用 "FormatedValue".ToString() 的解决方案(正如 Rahul Rajput 建议的那样)总是给出一个空字符串。我用“_Combobox.DataSource = list;”动态填充了我的组合框。 "list" 是一个字符串列表。【参考方案3】:

也试试这个:

DataGridView.CurrentRow.Cells(Column.name).EditedFormattedValue.ToString()

EditedFormattedValue 对象给出DataGridView 中单元格的当前格式化值,无论该单元格是否被编辑或处于编辑模式。捕获ComboBox 选择或DataGridView 中的任何单元格值更方便。

【讨论】:

【参考方案4】:

要访问数据网格视图中当前选定的文本,您需要引用组合框列的CurrencyManager。 CurrencyManager 与钱无关,而是管理列与其数据源之间的绑定。 CurrencyManager 可以告诉您组合框的当前选择是什么。

代码:

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

注意:没有必要将列转换为组合框,我这样做只是为了向您展示我传入的列。我使用索引 0,但使用实际索引的任何索引您的组合框列。

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

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

所以在我的例子中,组合框列的数据源是一个名为 Choice 的类,选择如下所示:

    public class Choice
    
            public string Text
            
                get;
                set;
            
    

当我访问 cm.Current 属性时,它将返回一个选择类的实例,我现在可以访问我的选择类的 Text 属性来查看选择了哪个值。您显然必须根据您的特定情况进行调整。我希望这会有所帮助。

【讨论】:

【参考方案5】:

你可以试试这个:-

dataGridView1.CurrentRow.Cells[0].Value.ToString();

索引您需要查看的单元格的列,以您的ComboBoxColumn 的索引为准。

【讨论】:

这并没有提供任何与 OP 不同的东西 - 他已经可以获得正确单元格的 Value 是的@Bobson,你是绝对正确的。我已经得到了正确的单元格的值。我只需要得到combobox selected text

以上是关于如何获取 Datagridview Combobox 选定项的 TEXT?的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET 如何获取datagridview选中项的值

如何获取DataGridView中的有效行数

C#如何获取datagridview中某一整列的数据。

C#如何获取datagridview最后一行第一列数据的值

如何获取datagridview中的所有行?

如何从 DataGridView 中的一行获取 DataRow