首页 > 解决方案 > 我想自动选择具有值的组合框

问题描述

你能告诉我如何解决这个问题吗?

我想用值表单数据库自动选择组合框进行显示(而不是用文本选择)。

将值和文本添加到 ComboBox

public void ComBoList(JArray Data)
{
        comboBoxBrand.Items.Clear();
        comboBoxSize.Items.Clear();
        comboBoxPCBrand.Items.Clear();
        comboBoxProductOf.Items.Clear();

        comboBoxBrand.DisplayMember = "Text";
        comboBoxBrand.ValueMember = "Value";
        comboBoxSize.DisplayMember = "Text";
        comboBoxSize.ValueMember = "Value";
        comboBoxPCBrand.DisplayMember = "Text";
        comboBoxPCBrand.ValueMember = "Value";
        comboBoxProductOf.DisplayMember = "Text";
        comboBoxProductOf.ValueMember = "Value";

        JArray AllData = JArray.Parse(Data.ToString());
        int JCount = AllData.Count;

        for (int i = 0; i <= (JCount - 1); i++)
        {
            foreach (var Values in AllData[i])
            {
                if (i == 0)
                {
                    int BId = int.Parse(Values["HddBrandId"].ToString());
                    comboBoxBrand.Items.Add(new { Text = Values["BrandName"].ToString(), Value = BId });
                }
                else if (i == 1)
                {
                    int SId = int.Parse(Values["SizeId"].ToString());
                    comboBoxSize.Items.Add(new { Text = Values["Size"].ToString(), Value = SId });
                }
                else if (i == 2)
                {
                    int PId = int.Parse(Values["PCBrandId"].ToString());
                    comboBoxPCBrand.Items.Add(new { Text = Values["BrandName"].ToString(), Value = PId });
                }
                else if (i == 3)
                {
                    int CId = int.Parse(Values["CountryId"].ToString());
                    comboBoxProductOf.Items.Add(new { Text = Values["CountryName"].ToString(), Value = CId });
                }
            }
        }
}

从数据库中选择具有值的组合框:

comboBoxBrand.SelectedValue = Data.BrandId; // int Data from Database
comboBoxSize.SelectedValue = Data.SizeId; // int Data from Database
comboBoxPCBrand.SelectedValue = Data.PCBrandId; // int Data from Database
comboBoxProductOf.SelectedValue = Data.ProductOfId; // int Data from Database

请帮我。

谢谢你。

标签: c#winforms

解决方案


DisplayMember 和 ValueMember 在使用数据绑定填充组合框时使用(通过将.DataSource属性设置为可绑定集合)

不要将东西放入您的组合.Items集合中,而是将它们放入列表中,将 设置.DataSource为列表,然后在设置时,如果您设置的值等于列表项的属性.SelectedValue之一的值,它将从列表中选择一个项目.Value

为此,使用 ValueTuple (或完整类)之类的东西可能比使用匿名类型更容易,但是可以绑定匿名类型,你只需要一个小提琴来为它创建一个列表,也许

var listToBind = new int []{}.Select(s=> new{ Text = "", Val=0}).ToList();
    

这将为您提供一个List<anonymoustype<string,int>>可以加载匿名类型项目的位置.. 然后您可以将组合 DataSource 设置为它,并且事情应该按您的预期工作.. 虽然通过 SelectedItem 将它们取出会返回一个包裹匿名类型的对象,你将很难使用它(我的投票;为 DisplayValue 对创建一个适当的类,或者使用一个元组,或者已经存在的东西,比如KeyValuePair<T,T2>


推荐阅读