私は 2 つのテーブルを持っています. ,にすべて とをemployees
示しています. 明らかに 1 人の従業員が多くのプロジェクトに関与できます. 1 つのプロジェクトには多くの従業員がいる可能性があります. だから私は、存在する多対多の関係をマッピングするこれを持っています。私が望むのは、ユーザーが最初のリストボックスでプロジェクト名をクリックすると、そのプロジェクトのすべての従業員がリストボックス2で選択されることです。また、ユーザーが listbox2 のアイテムをクリックすると、(従業員) その従業員が所属するすべてのプロジェクトが listbox1 で選択されます。project
listbox2
employees
listbox1
projects
EmployeeProject
しかし、このプロセスに ListBox.SelectedIndexChanged イベントを使用し、listbox2 の値を 1 つでも選択すると、listbox2 の SelectedIndexChagned がトリガーされ、現在の従業員が所属する listbox1 のすべての項目を選択することで動作が開始されますが、再び、listbox1 のアイテムが 1 つでも選択されるとすぐに、その SelectedIndexChanged イベントが発生し、このように永遠に続きます。それで、これの解決策は何ですか?これまでのところ、私はこれをやった..
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// Load the list of employees
cmd.CommandText =
"SELECT EmpName FROM Employee WHERE EmpID IN(SELECT EmpID FROM EmployeeProject WHERE ProjectID =(SELECT ProjectID FROM Project WHERE ProjectName = '" +
listBox1.SelectedItem.ToString() + "')) ORDER BY EmpId";
var rdr = cmd.ExecuteReader();
listBox2.Items.Clear();
// right now, I am doing this to escape this recursive loop, but thats not what I want
while (rdr.Read())
{
listBox2.Items.Add(rdr.GetString(0));
}
rdr.Close();
this.AutoScroll = true;
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
// Load the list of projects
cmd.CommandText =
"SELECT ProjectName FROM Projects WHERE ProjectID IN(SELECT ProjectID FROM EmployeeProject WHERE EmpId=(SELECT EmpId FROM Employee WHERE EmpName= '" +
listBox2.SelectedItem.ToString() + "')) ORDER BY ProjectID";
var rdr = cmd.ExecuteReader();
listBox1.Items.Clear();
// again, I don't want to clear, but select all those employee in listbox1 that are involved in this selected project, but can't do it because it would cause infinite recursion of these
while (rdr.Read())
{
listBox2.Items.Add(rdr.GetString(0));
}
rdr.Close();
this.AutoScroll = true;
}
そう?達成したいことを達成するために何をすべきですか?そして、どうすればその再帰を避けることができますか? この方法も今示したように機能することはわかっていますが、クリアして再び表示したくはありません (これは単純なユーザーを混乱させる可能性があります)。選択ごとに、その選択に対応する値が他のリストボックスで選択されるようにします(もちろん再帰は発生しません!)。どうすればいいのですか?
EDITプログラムでリストボックス内の複数の項目を選択する方法がわからないので、それを教えていただければ幸いです!