如何获取datagridviewcomboboxcolumn的ValueMember的值
Posted
技术标签:
【中文标题】如何获取datagridviewcomboboxcolumn的ValueMember的值【英文标题】:How to get value of ValueMember of datagridviewcomboboxcolumn 【发布时间】:2012-05-04 10:05:21 【问题描述】:朋友们,我在 datagridview 中使用 datagridviewcomboboxcolumn 作为列索引 1。我已经从 access 数据库表中获取数据并通过以下方式填充了 datagridviewcombobox 列:
for (int i = 0; reader.Read(); i++)
cmbBusCode.Items.Add(reader["BUSINESS_CODE"] + "-" + reader["BUSINESS_DESCRIPTION"]);
cmbBusCode.ValueMember = "BUSINESS_CODE";
然后我写这个:
cmbBusCode.DisplayIndex = 1;
cmbBusCode.Width = 200;
cmbBusCode.Name = "Code";
cmbBusCode.HeaderText = "Code";
并将此列添加为
dgView.Columns.Add(cmbBusCode);
正在填充组合框,我可以从列表中选择任何一个。现在,当我保存数据时,我想获取所选项目的 ValueMember。为了获得这个值,我使用以下代码,但它给出了字段“BUSINESS_CODE”的字符串表示,而不是值。请帮助我,以便获取所选项目的 ValueMemeber。
foreach (DataGridViewRow row in dgView.Rows)
string cd = row.Cells["Code"].Value.ToString();
【问题讨论】:
【参考方案1】:您添加到列中的“项目”没有“BUSINESS_CODE”列(本质上,您添加的项目只是一个字符串),所以这不起作用。
您需要做的是分配包含多列的项目。一个必须是BUSINESS_CODE
列(因为您希望此列成为DataGridView
中基础字段的值),另一个应该是包含您当前添加的连接值的显示列(DisplayMember
和 ValueMember
)。
最简单的方法是创建一个类型化的数据集,添加一个包含我描述的两列的表,然后用来自数据读取器的数据填充该表。
然后,将表添加为列的数据源。
【讨论】:
【参考方案2】:您可以尝试将DataGridViewComboBoxCell
而不是string
添加到cmbBusCode.Items
集合。然后,您可以在单元格中指定Value
。我不确定这是否可行,但值得一试。
【讨论】:
嗯?cmbBusCode
是 DataGridViewComboBoxCell
!它的Items
集合应该包含一个项目列表,这些项目可以显示并且可以选择。如果作为项传递的对象包含与DisplayMember
和ValueMember
的值对应的成员,则这些成员的值将显示或分配给基础数据对象的字段。你的建议是不值得一试,因为这不是事情的运作方式......
@ThorstenDittmar,是的 cmbBusCode 是 DataGridViewComboBoxColumn,我已经使用上述代码进行了填充。我想为列表中的选定项目获取相应的 ValueMember..但我没有得到..
你看我的回答了吗?您的项目不包含具有您分配给 ValueMember
属性的名称的属性。阅读我的答案。打个比方:您可以编写一个名为 button_Click
的方法 - 但是,除非您将其分配给按钮的 Click
事件,否则它不会被调用。您没有获得值,因为您确实将属性名称分配给 ValueMember
,但在基础对象中没有该名称。以上是关于如何获取datagridviewcomboboxcolumn的ValueMember的值的主要内容,如果未能解决你的问题,请参考以下文章