0

好的,所以我在一种形式中有两个列表框,其中一个的内容取决于在另一个中选择了哪个项目。基本上 listbox1 是雇主列表,而 listbox2 是所选雇主的雇员列表。当我选择没有雇员的雇主时,listbox2 中没有预期的项目。但是由于某种原因,当我在选择没有雇员的雇主之后选择另一个雇主时,listbox2 拒绝再次填充雇员列表。我在 listbox2 旁边有一个标签,它会根据 listbox2 中的选定项目自动更新其文本,并且当我单击 listbox2 中的项目应该在的位置时更新。几乎就像计算机在呈现列表框时遇到问题一样。我尝试了 listbox2.Refresh() 之类的方法,但我什至不知道它的作用。所以基本上,列表框工作,它只是没有显示任何东西。以下是一些相关代码:

更改 listbox1 中选定索引时的代码:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        listBox1.DataSource = Program.MEmployerList;
        listBox1.DisplayMember = "Name";
        Employer temps = (Employer)listBox1.SelectedItem;
        listBox2.DataSource = temps.Employees();
        listBox2.DisplayMember = "Name";
        listBox2.Refresh();
        label5.Text = temps.CompanyName() + " (" + temps.EmployerID() + ")";
        label4.Text = "Phone Number: " + temps.PhoneNumber() + "\nCell Number: " + temps.CellNumber() + "\nAdress: " + temps.StreetAdress() + " - " + temps.City() + ", " + temps.State() + " " + temps.ZipCode() + "\nContact Person: " + temps.ContactPerson();
        if (listBox2.Items.Count != 0 && listBox1.Items[0] != null)
        {
            Employee temped = (Employee)listBox2.SelectedItem;
            label4.Text = label4.Text + "\n\nSelected Employee Info: " + temped.Name + "\nPhone Number: " + temped.PhoneNumber() + "\nCell Number: " + temped.CellNumber() + "\nAddress: " + temped.StreetAdress() + " - " + temped.City() + ", " + temped.State() + " " + temped.ZipCode();
        }
    }

以下是更改 listbox2 中选定索引时的代码:

private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        listBox1.DataSource = Program.MEmployerList;
        listBox1.DisplayMember = "Name";
        Employer temps = (Employer)listBox1.SelectedItem;
        listBox2.DataSource = temps.Employees();
        listBox2.DisplayMember = "Name";
        listBox2.Refresh();
        label5.Text = temps.CompanyName() + " (" + temps.EmployerID() + ")";
        label4.Text = "Phone Number: " + temps.PhoneNumber() + "\nCell Number: " + temps.CellNumber() + "\nAdress: " + temps.StreetAdress() + " - " + temps.City() + ", " + temps.State() + " " + temps.ZipCode() + "\nContact Person: " + temps.ContactPerson();
        if (listBox2.Items.Count != 0 && listBox1.Items[0] != null)
        {
            Employee temped = (Employee)listBox2.SelectedItem;
            label4.Text = label4.Text + "\n\nSelected Employee Info: " + temped.Name + "\nPhone Number: " + temped.PhoneNumber() + "\nCell Number: " + temped.CellNumber() + "\nAddress: " + temped.StreetAdress() + " - " + temped.City() + ", " + temped.State() + " " + temped.ZipCode();
        }
    }

让我知道是否有任何其他代码可以帮助解决此问题。

更新:请记住,程序正在记录我在 listbox2 中选择不同项目的事实,这些项目只是没有显示,这让我相信这是一个渲染问题。我单击 listbox2 中的条目应该在哪里,并且 label4 更新。

4

2 回答 2

1

你最后错过了这个吗?

listBox1.DataBind()
于 2012-11-26T16:30:45.927 回答
0

弄清楚了。

我只需要隐藏控件然后再次显示它以强制重新绘制和重新填充它。似乎是一个渲染问题,因为列表内容正在更改但未重新绘制。

listbox1.Hide();
listbox1.Show();
于 2013-02-01T20:10:20.370 回答