【问题标题】:How to get the TEXT of Datagridview Combobox selected item?如何获取 Datagridview Combobox 选定项的 TEXT?
【发布时间】: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 所说-尚不清楚您在寻找什么。您能否编辑问题以说明您的预期和实际结果是什么?

标签: c# winforms datagridview combobox selectedtext


【解决方案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】:

    要访问数据网格视图中当前选定的文本,您需要引用组合框列的CurrencyManagerCurrencyManager 与钱无关,而是管理列与其数据源之间的绑定。 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
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 2011-01-13
      • 1970-01-01
      相关资源
      最近更新 更多