2011-03-11 57 views
2

我想要做的是根據第一個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是沒有得到填充。任何幫助將不勝感激。謝謝!

+0

你是否已經完成了代碼?你的代碼是否達到了'FillByParentObjective'?這是WPF,Silverlight,Winforms,Webforms? – Lazarus 2011-03-11 16:24:19

+0

它是Visual Studio 2010.不,我的if語句檢查選中的項目是否返回false,無論項目被檢查。編輯:我也試過'if(ckbObjectives.GetItemCheckState(i)== CheckState.Checked)'這也返回false當一個項目被選中。 – Megan 2011-03-11 16:34:18

回答

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/Web窗體/ WPF等,但用上面最好的輸出替換上面的MessageBox.Show。這至少可以向你保證你正在尋找正確的,最新的數據。

0

設置DataSource屬性後,通常需要在CheckedListBox上調用DataBind()以顯示其中的數據。它有幫助嗎?

+0

不,這個問題實際上是在我的if語句邏輯中。如果我只是循環檢查項目,我可以使用上面看到的代碼的非常類似的變體來添加它們。 – Megan 2011-03-11 16:45:26