2

私がやろうとしているのは、最初のcheckedlistboxで選択されたアイテムに基づいて2番目のcheckedlistboxにデータを入力し、最初のボックスで親がチェックされていないときにデータベースからアイテムを削除することです。チェックされたアイテムのみをループすることで 2 番目のボックスに入力できますが、テーブルから削除する場合は、チェックされていないアイテムも含める必要があります。これが私が現時点で持っているコードです:

        for (int i = 0; i < ckbObjectives.Items.Count; i++)
        {
            objectiveTableAdapter.ClearBeforeFill = false;

            if (ckbObjectives.GetItemChecked(i))
            {
                this.objectiveTableAdapter.FillByParentObjective((CWSToolkitDataSet.ObjectiveDataTable)cWSToolkitDataSet.Tables["ChildObjectives"], Convert.ToInt32(((DataRowView)ckbObjectives.Items[i])[ckbObjectives.ValueMember].ToString()));
            }
            else
            {
                this.objectiveTableAdapter.Delete((CWSToolkitDataSet.ObjectiveDataTable)cWSToolkitDataSet.Tables["ChildObjectives"], Convert.ToInt32(((DataRowView)ckbObjectives.Items[i])[ckbObjectives.ValueMember].ToString()));
            }
        }

        cblSubObjectives.DataSource = cWSToolkitDataSet.Tables["ChildObjectives"];
        cblSubObjectives.DisplayMember = "Title";
        cblSubObjectives.ValueMember = "ObjectiveID";

エラーは発生していませんが、2 番目のチェックリストボックスに値が入力されていません。どんな助けでも大歓迎です。ありがとうございました!

4

2 に答える 2

0

DataSource プロパティを設定した後、通常は CheckedListBox で DataBind() を呼び出して、データを表示する必要があります。それは役に立ちますか?

于 2011-03-11T16:38:05.527 に答える
0

正しいことをチェックしていると仮定すると、これは機能するはずです。

ループしている CheckedListBox を再確認して、正しい応答が得られていることを確認できますか。

for (int i = 0; i < ckbObjectives.Items.Count; i++)
{
    MessageBox.Show(String.Format("{0}: {1}", 
                    ckbObjectives.GetItemText(ckbObjectives.Items[i]),
                    ckbObjectives.GetItemCheckState(i).ToString())); 
}

WinForms/WebForms/WPF などを使用しているかどうかはまだわかりませんが、MessageBox.Show上記を出力に最適なものに置き換えてください。これにより、少なくとも、正しい最新のデータを見ていることが保証されます。

于 2011-03-11T16:55:57.237 に答える