如何从Combobox中设置选定的值?

时间:2011-07-14 03:27:50

标签: c# .net winforms data-binding combobox

我在c#windows窗体中使用了combobox。我将项目列表绑定如下:

var employmentStatus = new BindingList<KeyValuePair<string, string>>();

employmentStatus.Add(new KeyValuePair<string, string>("0", "[Select Status]"));
employmentStatus.Add(new KeyValuePair<string, string>("1", "Contract"));
employmentStatus.Add(new KeyValuePair<string, string>("2", "Part Time"));
employmentStatus.Add(new KeyValuePair<string, string>("3", "Permanent"));
employmentStatus.Add(new KeyValuePair<string, string>("4", "Probation"));

employmentStatus.Add(new KeyValuePair<string, string>("5", "Other"));
cmbEmployeeStatus.DataSource = employmentStatus;
cmbEmployeeStatus.ValueMember = "Key";
cmbEmployeeStatus.DisplayMember = "Value";
cmbEmployeeStatus.SelectedIndex = 0;

我将所选值保存在数据库中,例如1或2.现在我想从数据库项中设置所选值,如:

cmbEmployeeStatus.SelectedValue =employee.employmentstatus;     

但是没有选择有效的组合框。我怎么能这样做?

11 个答案:

答案 0 :(得分:45)

试试这个。

cmbEmployeeStatus.SelectedIndex = cmbEmployeeStatus.FindString(employee.employmentstatus);

希望有所帮助。 :)

答案 1 :(得分:15)

为了手动设置数据库样式ComboBoxs尝试设置数字(内部)和某些文本(可见)之间的关系,我发现你必须:

  1. 将您的项目存储在列表中(您已关闭 - 除了字符串,字符串 - 需要int,字符串)
  2. 列表中的DataSource属性(你很好)
  3. DataMember,DataValue(你很好)
  4. 加载默认值(你很好)
  5. 从数据库中存入价值(您的问题)
  6. 获取重新存入数据库的价值(下一个问题)
  7. 首先要做的事情。将KeyValuePair更改为如下所示:

    (0, “选择”)   (1,“选项1”)

    现在,当你运行你的sql“从员工那里选择empstatus”并获得一个整数时,你需要设置组合框而不浪费一大堆时间。

    简单地说: * ** SelectedVALUE - 不是商品 * ** *

    cmbEmployeeStatus.SelectedValue = 3;   //or
    
    cmbEmployeeStatus.SelectedValue = intResultFromQuery;   
    

    无论您是使用代码值手动加载组合框,还是从查询加载comboBox,这都将有效。

    如果你的外键是整数,(对于我所做的,它们都是),生活很容易。用户对comboBox进行更改后,您将在数据库中存储的值为SelectedValue。 (根据需要转换为int。)

    以下是我将ComboBox设置为数据库中的值的代码:

    if (t is DBInt) //Typical for ComboBox stuff
        {
        cb.SelectedValue = ((DBInt)t).value;
        }
    

    并检索:

    ((DBInt)t).value = (int) cb.SelectedValue;
    

    DBInt是Integer的包装器,但这是我的ORM的一部分,它让我可以手动控制数据绑定,并减少代码错误。

    为什么我这么晚才回答这个问题?我也在努力解决这个问题,因为网上似乎没有关于如何做到这一点的好消息。我想通了,并且认为我会很好并发布给其他人看。

答案 2 :(得分:4)

在Windows应用程序中 我们这样使用

 DDLChangeImpact.SelectedIndex = DDLChangeImpact.FindStringExact(ds.Tables[0].Rows[0]["tmchgimp"].ToString());
 DDLRequestType.SelectedIndex = DDLRequestType.FindStringExact(ds.Tables[0].Rows[0]["rmtype"].ToString());

答案 3 :(得分:3)

以下将适用于您的情况。

cmbEmployeeStatus.SelectedItem =employee.employmentstatus;

当您将SelectedItem属性设置为对象时,ComboBox会尝试使该对象成为列表中当前选定的对象。如果在列表中找到该对象,它将显示在ComboBox的编辑部分中,并且SelectedIndex属性将设置为相应的索引。如果列表中不存在该对象,则SelectedIndex属性将保留其当前值。

修改

我认为在你的情况下设置如下所示的选项是不正确的。

cmbEmployeeStatus.SelectedItem =**employee.employmentstatus**;

如下所示

var toBeSet = new KeyValuePair<string, string>("1", "Contract");
cmbEmployeeStatus.SelectedItem = toBeSet;

您应该分配正确的名称值对。

答案 4 :(得分:2)

cmbEmployeeStatus.Text = "text"

答案 5 :(得分:2)

在组合框中使用SelectedIndex属性作为相应的员工状态。

答案 6 :(得分:1)

我怀疑在保存到数据库时出现问题。我理解您的步骤:

  1. 填充并绑定
  2. 用户选择和项目,点击并保存..然后保存在数据库中
  3. 现在如果您选择其他项目则不会选择?
  4. 获得更多代码,特别是在保存时?您的代码中的哪个位置正在初始化并填充绑定列表

答案 7 :(得分:1)

试试这个

combobox.SelectedIndex = BindingSource.Item(9) where "9 = colum name 9 from table"

答案 8 :(得分:0)

在ComboBox中设置值

cmbEmployeeStatus.Text="Something";

答案 9 :(得分:0)

可能的解决方案:

cmbEmployeeStatus.SelectedValue = cmbEmployeeStatus.Items.FindByText("text").Value;

答案 10 :(得分:0)

试试这个:

KeyValuePair<string, string> pair = (KeyValuePair<string,string>)this.ComboBox.SelectedItem;