用C#按值选择组合框项目

3

我有一个下拉框,绑定了Datatable,并具有以下属性:

cboCars.DisplayMember = "carLiscen";
cboCars.ValueMember = "carNo";

当我知道ValueMember时,如何选择DisplayMember


你能不能简单地使用ComboBox.Text属性? - Mo Patel
comboBox.Text属性显示了DisplayMember的值。我有ValueMember。 - yaron.g
5个回答

6

如果您设置了ValueMember,则可以使用SelectedValue进行选择。

cboCars.DisplayMember = "carLiscen";
cboCars.ValueMember = "carNo";

cboCars.SelectedValue = "valuemember value";

14
为什么每个人都在说这个?这在winforms应用程序中不起作用。 - Jonathan Wood
2
值的数据类型应该与数据源中的相同。 - Abdullah Qudeer
@AbdullahQudeer 您的评论对我很有帮助。我的数据源的 valueMemberint,但我却将一个 short 值进行了强制转换。 - Ali Majed HA

2
你可以搜索正确的项目并将其设置为那个,非常简单:
cbTEST.SelectedIndex = cbTEST.FindStringExact("your search string here");

或者根据ListViewItem选择一个项目:
cbTEST.SelectedIndex = cbTEST.FindStringExact(lvTEST.SelectedItems[0].SubItems[0].Text);

那就这样。非常简单!


2
您可以使用cboCars.SelectedValue = "123";属性来实现此功能。 下面是一个代码片段,展示了它的使用方法。
    public void Test()
    {
        ArrayList info = new ArrayList();
        info.Add(new CarInfo { CarLiscen = 123456, CarNo = 123});
        info.Add(new CarInfo { CarLiscen = 234567, CarNo = 234 });
        cboCars.DataSource = info;

        cboCars.DisplayMember = "CarLiscen";
        cboCars.ValueMember = "CarNo";

        cboCars.SelectedValueChanged +=
            delegate(object sender, EventArgs e)
            {
                if (cboCars.SelectedIndex != -1)
                {
                    this.Text = cboCars.SelectedValue.ToString();
                }
            };

        cboCars.SelectedValue = 234;
    }

如果您想知道CarInfo的定义,这是它的代码(非常简单):

public class CarInfo
{
    public int CarLiscen { get; set; }
    public int CarNo { get; set; }
}

希望这能有所帮助。

1

大家好,如果要搜索文本或值,最好的方法是

int Selected;    
int count = ComboBox1.Items.Count;
    for (int i = 0; (i<= (count - 1)); i++) 
     {        
         ComboBox1.SelectedIndex = i;
        if ((string)(ComboBox1.SelectedValue) == "SearchValue") 
        {
            Selected = i;
        }

    }

    ComboBox1.SelectedIndex = Selected;

工作正常,但这不是一个合适的方式,因为在大量数据上可能会出现操作缓慢的情况。 - Monzur

0
问题在于组合框期望精确的类型。例如,如果您使用DataGridView并在字段中看到值(int),则将其传递给组合框的SelectedValue属性。但实际上,您传递的不是整数,而是对象。这通常是出错的原因。我花了一段时间来解决这个问题,但最终我找到了解决方法...如何解决...很简单:
例如,您有一个ID(数据库中的整数),那么您需要做类似于以下内容的事情:
这是我所做的,但它不起作用: cmbFilter.SelectedValue = dgvListOfFilters.Rows[intRowSelected].Cells[3].Value;
要使其工作,您应该执行以下操作: int intCategory = Convert.ToInt32(dgvListOfFilters.Rows[intRowSelected].Cells[3].Value); cmbFilter.SelectedValue = intCategory;
希望这对许多人有所帮助...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接