组合框仅在选择第二项及以下时加载

时间:2010-11-01 22:23:14

标签: c# winforms combobox

这真的很奇怪。我想选择一个州,并在另一个组合框中加载来自该州的城市。

在选择组合框中的第一项时,它的工作时间为:

这是我的全班。 if中的selectedIndexChanged语句是为了确保选择了某些内容。问题是,如果我将其设置为cmbState.SelectedIndex >= 0,则会引发异常,因为在初始加载时,comboBox在那里没有.State变量,而不是.Value

我不知道这是否有意义。

private void MainForm_Load(object sender, EventArgs e)
{
    LoadDepartmentsToComboBox();
}

private void LoadCitiesToComboBox(long StateID)
{
    cmbCity.DataSource = null;
    CityRepository cityRepo = new CityRepository();
    cmbCity.DataSource = cityRepo.FindAllCities().Where(c => c.IDState == StateID);
    cmbCity.DisplayMember = "Name";
    cmbCity.ValueMember = "ID";
}

private void LoadDepartmentsToComboBox()
{
    cmbState.DataSource = null;
    StateRepository stateRepo = new StateRepository();
    cmbState.DataSource = stateRepo.FindAllStates();
    cmbState.DisplayMember = "Name";
    cmbState.ValueMember = "ID";
}

private void cmbState_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cmbState.SelectedIndex > 0)
    {
        LoadCitiesToComboBox(Convert.ToInt64(cmbState.SelectedValue));
    }
}

如果我执行使用cmbState.SelectedIndex >= 0,则会收到此异常:

  

无法投射类型的对象   输入'DocumentScannerDanyly.State'   'System.IConvertible'。 'System.IConvertible'。

当我使用SelectedIndex >= 0并使用普通旧版>0时,除非选择了第一个项目,否则一切正常;可以理解,因为它没有考虑第一项。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

  1. 不要指定展示成员&每个加载中的Value成员,只需在构造函数中分配一次,例如。
  2. 将ToList()添加到将分配给DataSource的结果
  3.   

    复杂DataBinding接受IList或IListSource作为数据源。

    检查this