无法获得组合框对象

时间:2011-11-27 14:55:35

标签: c# winforms data-binding

嗨,在我的组合框中,我想让不同的国家出现在其中。但我试着尝试,永远不会让它出现。这就是我的表现:

class Countries
{
    public string Name { get; set; }
    public IList<Countries> Cities { get; set; }

    public Countries()
    {
    }
    public Countries(string _name)
    {
        Cities = new List<Countries>();
        Name = _name;

        List<Countries> countries = new List<Countries> { new Countries("UK"),  
                                 new Countries("Australia"),  
                                 new Countries("France") };
   }

   private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
   {
        CustomerFiles.Countries country = new CustomerFiles.Countries();
        cbCountry.DataSource = country.Cities;
        cbCountry.DisplayMember = country.Name;
   }

我能做什么我仍然没有在组合框中找到任何国家?!?

3 个答案:

答案 0 :(得分:2)

您需要调用DataBind方法

 cbCountry.DataSource = country.Cities;
 cbCountry.DisplayMember = country.Name;

 cbCountry.DataBind(); // method is absent in WinForms 

更新:您的问题不在于数据绑定 - 您可以在Form构造函数中填写 cbCountry.DataSource 。您的Countries.Cities属性为空。

答案 1 :(得分:2)

您提供的代码没有多大意义,使用包含相同类的列表然后具有name属性的类Country。 (我有点惊讶所有编译)

我将给出两个在WinForms中为组合框提供数据的基本示例 - 第一个简单地提供字符串列表,第二个数据绑定对象列表(我怀疑是你的目标)。

下面是一个Form类,它有一个ComboBox成员。我创建一个List并提供随后出现在ComboBox中的国家/地区名称:

public partial class Form1 : Form
{
    private List<string> countries_;

    public Form1()
    {
        InitializeComponent();

        countries_ = new List<string> { "UK",   
                                "Australia",   
                                "France" };

        comboBox1.DataSource = countries;

    }
}

下一个示例非常相似,但现在我绑定到类型为Country的列表,其中Country是具有id(可能来自数据库)和名称的类。我将显示成员设置为告诉组合框向用户显示哪个类属性,并将值成员设置为id属性以允许我设置SelecteValue。

public partial class Form1 : Form
{
    bool click = false;

    public Form1()
    {
        InitializeComponent();

        List<Country> countries = new List<Country> { new Country{ CountryId = 1, Name = "UK"},  
                                new Country{ CountryId = 2, Name = "Australia"},   
                                new Country{ CountryId = 3, Name = "France"} };

        comboBox1.DataSource = countries;
        comboBox1.DisplayMember = "Name";
        comboBox1.ValueMember = "CountryId";
        comboBox1.SelectedValue = 2;
    }
}

public class Country
{
    public int CountryId { get; set; }
    public string Name { get; set; }
}

答案 2 :(得分:0)

您在SelectedIndexChanged事件中调用了国家/地区的default constructor个类。所以,这种行为对我来说似乎很自然,因为城市列表不包含任何项目。您是否需要致电parameterized constructor填写您的收藏品?