级联三个组合框

时间:2018-11-06 13:38:27

标签: c# winforms combobox cascading

我的Windows窗体具有三个组合框。 CmdCountry引用CmdContinent的子表,而CmdCity引用CmdCountry的子表。

但是当我尝试通过编码从cmbContinent_SelectedIndexChanged获取ContinentId时,出现诸如“格式错误”之类的错误。

int ContId = Convert.Into32(cmbContinent.SelectedValue.ToString());

我的前两个组合框如下:

private void Continent()
{
    var continent = (from u in db.Continent
                     select new { u.ContinentName,  u.ContinentId }
                    ).ToList();
    cmbContinent.DataSource = continent;
    cmbContinent.DisplayMember = "ContinentName";
    cmbContinent.ValueMember = "ContinentId";
}

private void cmbContinent_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cmbContinent.SelectedValue.ToString() != null)
    { 
        int ContId = Convert.Into32(cmbContinent.SelectedValue.ToString()); // Here I get the error
        var country = (from u in db.Country
                       where u.ContinentId == ContId
                       select new { u.CountryId, u.CountryName }).ToList();

        cmbCountry.DataSource = country;
        cmbCountry.DisplayMember = "CountryName";
        cmbCountry.ValueMember = "CountryId";
    }
}

并在构造函数中加载第一个组合框Continent:

public NewAccount()
{
    InitializeComponent(); 
    Continent();
}

如果有人可以帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我在当前项目中使用了一个ComboBox,并且做了类似的事情。

int valueMax = Convert.ToInt32(cbxNumberValues.SelectedItem);

对于您的代码,这里应该起作用。请注意,我没有做太多修改以更常规地编码。

int contId = Convert.ToInt32(cmbContinent.SelectedItem);

我也建议使用“ cbx”或“ cmb”而不是“ cmd”,因为它通常会说出命令。但这不是很重要