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

Posted

技术标签:

【中文标题】如何从组合框中设置选定的值?【英文标题】:How to set selected value from Combobox? 【发布时间】:2011-10-05 00:20:09 【问题描述】:

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

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;     

但是组合框没有被选中。我该怎么做?

【问题讨论】:

我使用了你所有的答案,但组合框没有与文本一起出现。我在 form_Load 中绑定了组合框。我删除了文本出现在组合框中的绑定。为什么? 我认为您分配为 selectedItem 的值不正确。我在下面更新了我的答案。 【参考方案1】:

试试这个

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

【讨论】:

【参考方案2】:

试试这个:

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

【讨论】:

您必须尝试强制转换此组合框因为 C# 在编译时是静态类型的,所以在声明变量后,它不能再次声明或用于存储另一种类型的值,除非该类型可转换为变量的类型。【参考方案3】:

一个可能的解决方案:

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

【讨论】:

【参考方案4】:

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

    将您的项目存储在一个列表中(您很接近 - 除了字符串、字符串 - 需要 int、字符串) DataSource 属性到列表(你很好) DataMember,DataValue(你很好) 加载默认值(你很好) 从数据库中输入值(您的问题) 获取值以放回数据库(您的下一个问题)

首先要做的事情。将您的 KeyValuePair 更改为如下所示:

(0,"选择") (1,"选项 1")

现在,当您运行 sql“Select empstatus from employees where blah”并返回一个整数时,您需要设置组合框而不浪费大量时间。

简单地说:*** SelectedVALUE - 不是项目****

cmbEmployeeStatus.SelectedValue = 3;   //or

cmbEmployeeStatus.SelectedValue = intResultFromQuery;   

无论您是否像以前那样手动加载了带有代码值的组合框,或者如果您从查询中加载组合框,这都将起作用。

如果你的外键是整数,(对我来说,它们都是整数),生活很容易。用户对组合框进行更改后,您将存储在数据库中的值是 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 的一部分,可让我手动控制数据绑定,并减少代码错误。

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

【讨论】:

【参考方案5】:
cmbEmployeeStatus.Text = "text"

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

以下内容适用于您的情况。

cmbEmployeeStatus.SelectedItem =employee.employmentstatus;

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

编辑

我认为在您的情况下将 Selected Item 设置如下是不正确的。

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

如下图

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

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

【讨论】:

【参考方案8】:

我怀疑当您保存到数据库时有些地方不对劲。我是否将您的步骤理解为:

    填充和绑定 用户选择和项目,点击并保存..然后你保存在数据库中 现在如果您选择其他项目,它不会选择?

获得更多代码,尤其是在保存时?在您的代码中初始化和填充绑定列表的位置

【讨论】:

【参考方案9】:

将 SelectedIndex 属性用于组合框中的相应员工状态。

【讨论】:

【参考方案10】:

在组合框中设置值

cmbEmployeeStatus.Text="Something";

【讨论】:

【参考方案11】:

试试这个。

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

希望对您有所帮助。 :)

【讨论】:

请记住,FindString 会返回以给定字符串开头的第一个元素,而 FindStringExact 会执行精确的字符串匹配。 为了安全起见,我更倾向于FindStringExactFindString 在这种情况下有效,但在列表包含类似项目的情况下可能会中断。

以上是关于如何从组合框中设置选定的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 php 中从表单提交的组合框中获取选定的值

ExtJS 4.1:如何在组合框中设置预选项目?

如何让组合框将正确的值传递给表?

如何在 Access 2007 中设置第一个连续组合框不可见?

WPF DataGrid - 从 DataGrid ItemsSource 对象的集合值中设置唯一的每行(对象)组合框值

从 material-ui 自动完成组合框中清除所有选定的值