如何获取 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,其文本为 No
和 Yes
,值分别为 0 和 1。我想在这里得到的是文本Yes
或No
,当组合框发生变化时。但我得到的是使用上述代码的值 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 的回复,但该解决方案并未如我所愿。我有是和否作为组合框中的文本。我能够获得 TEXTYes
,但是当我将组合框值更改为 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?的主要内容,如果未能解决你的问题,请参考以下文章