C#Winforms - 设置组合框选择的值

时间:2017-01-30 19:42:07

标签: c# winforms combobox selectedvalue

我想为组合框设置名称和值对。所以我创建了一个名为Item的类,如下所示:

// Content item for the combo box
private class Item
{
    private readonly string Name;
    private readonly int Value;
    private Item(string _name, int _value)
    {
        Name = _name; Value = _value;
    }
    private override string ToString()
    {
        // Generates the text shown in the combo box
        return Name;
    }
}

数据集如下:

comboBox1.DataSource = null;
comboBox1.Items.Clear();
// For example get from database continentals.
var gets = _connection.Continentals;
comboBox1.Items.Add(new Item("--- Select a continental. ---", 0));
foreach (var get in gets)
{
    comboBox1.Items.Add(new Item(get.name.Length > 40 ? get.name.Substring(0, 37) + "..." : get.name, Convert.ToInt32(get.id)));
}
// It points Africa.
comboBox1.SelectedValue = 3;

这是输出:

// 1 - Europe
// 2 - Asia
// 3 - Africa
// 4 - North America
// 5 - South America
// 6 - Australia
// 7 - Antartica

在我的例子中,必须选择非洲大陆,但事实并非如此。 在我的编辑表单中,例如,此代码从person表中获取数据:

var a = _connection.persons.SingleOrDefault(x => x.id == Id);

当我编码comboBox2.SelectedValue = a.continental时,必须选择非洲大陆,但事实并非如此。我没有解决问题。

1 个答案:

答案 0 :(得分:4)

SelectedValue属性文档中所述:

  

物业价值
  一个对象,包含ValueMember属性指定的数据源成员的值。

     

<强>说明
  如果未在ValueMember中指定属性,则SelectedValue将返回对象的 ToString 方法的结果。

要获得所需的行为,您需要将var c; function setup() { c = createCanvas(windowWidth-20, windowHeight-20); } function draw() { background(30); } function mousePressed() { c.size(windowWidth-20, windowHeight-20); console.log(width + " " + height); } Name公开为Value班级的公共属性,并使用ItemDataSource和控件的ValueMember属性:

DisplayMember

和样本用法:

// Content item for the combo box
private class Item
{
    public string Name { get; private set; }
    public int Value { get; private set; }
    private Item(string _name, int _value)
    {
        Name = _name; Value = _value;
    }
}