通过循环遍历checkedlistbox来填充和删除数据库表中的项目

时间:2011-03-11 16:20:55

标签: c# sql loops checkedlistbox

我要做的是根据第一个checkedlistbox中的选定项填充第二个checkedlistbox,并在第一个框中取消选中父项时从数据库中删除项。我可以通过循环遍历已检查的项来填充第二个框,但是,如果我要从表中删除它们,我还需要包含未选中的项。这是我目前的代码:

        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";

我没有收到任何错误,但第二个checkedlistbox没有填充。任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

设置DataSource属性后,通常需要在CheckedListBox上调用DataBind()以显示其中的数据。这有帮助吗?

答案 1 :(得分: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。这至少可以保证您正在查看正确的,最新的数据。