列表框不显示项目?

时间:2012-11-26 16:26:25

标签: c# visual-studio-2010 express

好的所以我在一个表单中有两个列表框,其中一个列表框的内容基于在另一个表单中选择的项目。基本上,listbox1是雇主列表,listbox2是所选雇主的雇员列表。当我选择没有雇员的雇主时,listbox2中没有按预期的项目。但出于某种原因,当我选择另一个没有雇员的雇主后,listbox2再次拒绝填写雇员名单。我在listbox2旁边有一个标签,它根据listbox2中的选定项自动更新其文本,当我点击listbox2中的项目时应该更新。几乎就像计算机在渲染列表框时遇到问题一样。我尝试了像listbox2.Refresh()这样的方法,但我甚至都不知道那是做什么的。所以基本上,列表框工作,它只是不显示任何东西。以下是一些相关代码:

列表框1中所选索引的更改时间代码:

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中的条目应该是哪里,标签4更新。

2 个答案:

答案 0 :(得分:1)

你最后是否错过了这个?

listBox1.DataBind()

答案 1 :(得分:0)

想出来。

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

listbox1.Hide();
listbox1.Show();