2013-02-26 54 views
1

我有一个组合框ValueMember = IDDisplayMember = Name。我需要用这个名字,所以我做这样的事情有关联的值:C# - 从组合框中检索选定的值

if (cboTypeOfMaterial.SelectedIndex != -1) 
      { 
       string temp = cboTypeOfMaterial.SelectedValue.ToString(); 
       //More code here... 
      } 

它返回ID值作为一个字符串。例如 - “7”。

如果我尝试:

if (cboTypeOfMaterial.SelectedIndex != -1) 
       { 
        string temp = cboTypeOfMaterial.DisplayMember.ToString(); 
        //More code here... 
       } 

我得到的字符串Name这是关键。

而我需要的是让所选元素的Name

+0

只需cboTypeOfMaterial.SelectedItem.ToString()也应该工作。试一试。 – 2013-02-26 07:49:12

回答

4

SelectedValue将返回ValueMember定义的属性值,SelectedItem将返回所选的全部对象,如果你想获得比你SelectedValue你将不得不投作为对象在ComboBox那么你之外的其他价值可以访问您的Name属性。

string temp = (cboTypeOfMaterial.SelectedItem as YourObjectType).Name; 
+0

谢谢,这个作品,是新的东西,所以我会用它! – Leron 2013-02-26 07:52:53

4

尝试通过SelectedItem访问元素,这将给你与该条目相关联的整个对象的价值,那么你就可以访问你需要的属性,在你的情况下ID

0
string temp = cboTypeOfMaterial.ValueMember.ToString(); 
1

你可以做的是创建一个自定义类在下拉列表中的条目。这可以是这样的:

public class ComboBoxItem 
{ 
    public string Display { get; set; } 
    public int Id { get; set; } 
    public override string ToString() 
    { 
     return this.Display; 
    } 
} 

那么你可以通过下面的代码获得所选ComboBoxItem:

ComboBoxItem cbi = (ComboBoxItem)cboTypeOfMaterial.SelectedValue; 
if(cbi != null) 
    // Access the Property you need 
-2

我想你也可以使用Text属性,但它不是一个很好的解决方案。更好的解决方案是建议@dutzu。

string temp = cboTypeOfMaterial.Text; 
1

我知道这是一个老问题,但我很惊讶没有人提到:

ComboBox1.GetItemText(ComboBox1.SelectedItem) 

返回所选项目的文本表示(即DisplayMember),是有帮助涉及数据绑定ComboBox或任何ListControl的案件。