如何获取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 中基础字段的值),另一个应该是包含您当前添加的连接值的显示列(DisplayMemberValueMember)。

最简单的方法是创建一个类型化的数据集,添加一个包含我描述的两列的表,然后用来自数据读取器的数据填充该表。

然后,将表添加为列的数据源。

【讨论】:

【参考方案2】:

您可以尝试将DataGridViewComboBoxCell 而不是string 添加到cmbBusCode.Items 集合。然后,您可以在单元格中指定Value。我不确定这是否可行,但值得一试。

【讨论】:

嗯? cmbBusCodeDataGridViewComboBoxCell!它的Items 集合应该包含一个项目列表,这些项目可以显示并且可以选择。如果作为项传递的对象包含与DisplayMemberValueMember 的值对应的成员,则这些成员的值将显示或分配给基础数据对象的字段。你的建议是值得一试,因为这不是事情的运作方式...... @ThorstenDittmar,是的 cmbBusCode 是 DataGridViewComboBoxColumn,我已经使用上述代码进行了填充。我想为列表中的选定项目获取相应的 ValueMember..但我没有得到.. 你看我的回答了吗?您的项目不包含具有您分配给 ValueMember 属性的名称的属性。阅读我的答案。打个比方:您可以编写一个名为 button_Click 的方法 - 但是,除非您将其分配给按钮的 Click 事件,否则它不会被调用。您没有获得值,因为您确实将属性名称分配给 ValueMember,但在基础对象中没有该名称。

以上是关于如何获取datagridviewcomboboxcolumn的ValueMember的值的主要内容,如果未能解决你的问题,请参考以下文章

java如何获取当前时间,java如何获取ip地址

JS如何获取OBJECT的值

js如何获取某一个元素,如果获取不到就继续获取,直到获取到后停止获取?

Groovy如何获取访问地址

js如何获取时间

js如何获取地址栏加密参数