Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置组合框中的选定值?_C#_.net_Winforms_Data Binding_Combobox - Fatal编程技术网

C# 如何设置组合框中的选定值?

C# 如何设置组合框中的选定值?,c#,.net,winforms,data-binding,combobox,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<s

我在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;
但组合框未选择值。我该怎么做呢?

试试这个

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

希望有帮助

在组合框中设置值

cmbEmployeeStatus.Text = "text"
cmbEmployeeStatus.Text="Something";

以下内容适用于您的情况

cmbEmployeeStatus.SelectedItem =employee.employmentstatus;
cmbEmployeeStatus.SelectedItem =**employee.employmentstatus**;
将SelectedItem属性设置为对象时,组合框将尝试使该对象成为列表中当前选定的对象。如果在列表中找到该对象,它将显示在组合框的编辑部分,SelectedIndex属性将设置为相应的索引。如果列表中不存在该对象,则SelectedIndex属性将保留其当前值

编辑

我认为在您的情况下,将所选项目设置为以下是不正确的

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

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

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

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

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

填充并绑定 用户选择并输入项目,点击并保存。。然后保存在数据库中 现在,如果你选择了另一个项目,它不会选择吗? 是否有更多代码,尤其是在保存时?在您的代码中,在windows应用程序中初始化和填充绑定列表的位置 我们是这样使用的

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

为了手动创建数据库样式组合框,尝试在内部数字和某些可见文本之间建立关系,我发现您必须:

将您的项目存储在您关闭的列表中-字符串除外,string-需要int,string 将DataSource属性添加到列表中即可 DataMember,DataValue你很好 加载默认值你就好了 从数据库中输入您的问题的值 获取值以将下一个问题放回数据库 第一件事。将KeyValuePair更改为,使其看起来像:

0,选择 1,备选方案1

现在,当您从employees运行sql Select empstatus时,需要在不浪费大量时间的情况下设置组合框

简单:**SelectedVALUE-非项目****

无论您是像以前那样手动加载带有代码值的组合框,还是从查询中加载组合框,这都会起作用

如果你的外键是整数,我所做的就是,它们都是,生活很简单。用户更改组合框后,将存储在数据库中的值为SelectedValue。根据需要转换为int

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

if (t is DBInt) //Typical for ComboBox stuff
    {
    cb.SelectedValue = ((DBInt)t).value;
    }
以及检索:

((DBInt)t).value = (int) cb.SelectedValue;
DBInt是整数的包装器,但这是ORM的一部分,它让我可以手动控制数据绑定,并减少代码错误

我为什么这么晚才回答?我也在努力解决这个问题,因为网络上似乎没有关于如何做到这一点的好信息。我想出来了,我会很高兴把它贴给别人看

一个可能的解决方案:

cmbEmployeeStatus.SelectedValue = cmbEmployeeStatus.Items.FindByText("text").Value;
试试这个:

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

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

我使用了你的所有答案,但是combox没有显示文本。我将combobox绑定为表单\加载。我删除组合框中显示的文本的绑定。为什么?我认为您指定为selectedItem的值不正确。我已经更新了下面的答案。您必须尝试强制转换此组合框,因为C在编译时是静态类型的,声明变量后,除非该类型可转换为变量的类型,否则不能再次声明或用于存储另一类型的值。请记住还有FindString,返回以给定字符串开头的第一个元素,以及执行精确字符串匹配的FindStringExact。为了安全起见,我更倾向于FindStringExact。FindString在这种情况下有效,但在列表中有类似项的情况下可能会中断。