0

さて、1つのフォームに2つのリストボックスがあり、一方のコンテンツは、もう一方のアイテムで選択されたアイテムに基づいています。基本的に、listbox1は雇用主のリストであり、listbox2はその選択された雇用主の従業員のリストです。従業員のいない雇用主を選択すると、期待どおりリストボックス2に項目がありません。しかし、何らかの理由で、従業員のいない雇用主を選択した後で別の雇用主を選択すると、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

Figured it out.

I just had to hide the control and then show it again to force it to be re-drawn and re-populated. Seemed to be a rendering issue as the list contents were being changed but not re-drawn.

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