如何在选择ComboBox值后加载ListBox



在VS 2012、WinForms、C#中工作。。。

我有一个ListBox,我想根据在ComboBox中选择的值来填充它。我已经测试了我的SQL查询,它可以工作,但我遇到了一个奇怪的问题,当我运行例程时,我的ComboBox和ListBox都是空的。当我在cb_Session_SelectedValueChanged例程中注释掉代码时,我的CB和LB加载得很好,但如果没有注释掉,我的LB和CB就会变成空白。

这就是我所拥有的:

private void cb_Session_SelectedValueChanged(object sender, EventArgs e)
{
    listbox_Sessions.Visible = true;
    LoadSessionListbox();
}
private void LoadSessionListbox()
{
    int tempID = Convert.ToInt32(cb_Session.SelectedValue);
    // Code here to load listbox, which works without above routine.
}

我是不是错过了什么?为什么我的CB和LB是空白的,添加了第一个例程?

[编辑]:

我把SelectedValueChanged中的例程放在MouseClick事件中,它可以工作,但不是在我想要的时候……你必须点击几次才能用正确的ID重新加载它。我觉得我离它越来越近了,但仍然不是正确的事件。

试试这个:

private void cb_Session_SelectedValueChanged(object sender, EventArgs e)
{
  if(cb_Session.SelectedValue>-1)
   {
    listbox_Sessions.Visible = true;
    LoadSessionListbox();
   }
}

想明白了!!

我最终在SelectedValueChanged例程中添加了一个简单的if语句,它修复了所有问题!

private void cb_Sessions_SelectedValueChanged(object sender, EventArgs e)
{
    listBox_Sessions.Visible = true;
    if (cb_Sessions.SelectedValue != null)
        LoadSessionListbox();
}

现在效果很好。

SelectedIndexChanged Event中尝试并遵循

private void cb_Session_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cb_Session.SelectedValue == null) return;
    if (cb_Session.SelectedIndex == -1) return;
    listbox_Sessions.Visible = true;
    LoadSessionListbox((int)cb_Session.SelectedValue);
}
private void LoadSessionListbox(int selectedValue)
{
   //TODO: Do stuff
}

最新更新