0

5 つの目標と 5 人の従業員がいます。各目標は、これら 5 人の従業員の任意の数に割り当てることができます。したがって、目標ごとに 5 つの CheckBoxLists があり、各 CheckBoxList にはこれら 5 人の従業員の名前が項目として含まれています。

どの従業員にどの目標が割り当てられているかをデータベースから取得したいと考えています。次のコードがあります。

            List<CheckBoxList> checkboxlists = new List<CheckBoxList>();
            checkboxlists.Add(CheckBoxList1);
            checkboxlists.Add(CheckBoxList2);
            checkboxlists.Add(CheckBoxList3);
            checkboxlists.Add(CheckBoxList4);
            checkboxlists.Add(CheckBoxList5);


            for (int z = 1; z <= checkboxlists.Count; z++)
            {
                SqlCommand check = new SqlCommand("SELECT ISGoal1, ISGoal2,ISGoal3, ISGoal4,ISGoal5 FROM PRM2011_EMPLOYEE_GOAL WHERE EmployeeID = '" + employeeid[z - 1] + "'", con);
                SqlDataReader y = check.ExecuteReader();

                y.Read();

                for (int j = 1; j <= 5; j++)
                {
                    if (null != y && y.HasRows)
                    {
                        string yes_or_no = y["ISGoal" + j].ToString().Trim();
                        if (yes_or_no == "Yes")
                        {
                            checkboxlists[j-1].Items[z-1].Selected = true;

                        }
                        //else checkboxlists[j - 1].Items[z - 1].Selected = false;
                    }
                }

                y.Close();
           }

私の問題は、従業員の目標を 1 つ選択しても、その特定の従業員に対応するすべてのチェックボックスが選択されることです。なぜこうなった?

それに応じて、投稿されたコードのelse部分をコメントアウトし、目標のいずれかが選択されていない場合、その従業員に対応するすべてのチェックボックスが選択解除されます. 助けてください。

4

2 に答える 2

0

いくつかの考え:

  1. forループを0から0未満、checkboxlists.Countおよび0から5未満にするようにします。これにより、あらゆる場所ですべての減算を処理する必要がなくなります。
  2. この行では、チェックボックスリストを反復処理するためにzを使用していると想定しているのでcheckboxlists[j-1].Items[z-1].Selected = true、そうすべきではありません。checkboxlists[z-1].Items[j-1].Selected = true

ここが遅いので、私の脳は少しぼやけているかもしれませんが、#2があなたの問題である可能性があります。それらの考えを試してみてください。それでも問題が解決しない場合は、フォローアップします。

于 2011-04-19T06:41:48.160 に答える