2011-09-20 47 views
13

我有一個數據綁定的checkedlistbox在一種形式,我想知道是否甚至可以數據綁定每個列表框項目的複選框與某個屬性一個東西。Winforms:如何綁定CheckedListBox與數據綁定的複選框項目

感謝提前任何幫助:)

編輯:也許我的問題是誤解。

我想知道是否有可能數據綁定CheckedListBox的每個項目的複選框。我知道如何將數據綁定到源代碼以及如何通過迭代遍歷來以編程方式更改條目。我不知道的是,如果有可能實現一個實現INotifyPropertyChanged的類 ,以便在「CheckedState」屬性發生更改時CheckedListBox會自行更新。

回答

30

根據Samich的答案,這是一個完整的例子,綁定源是Object

private void Form1_Load(object sender, EventArgs e) 
     { 
      List<randomClass> lst = new List<randomClass>(); 

      lst.Add(new randomClass()); 
      lst.Add(new randomClass()); 
      lst.Add(new randomClass()); 
      lst.Add(new randomClass()); 
      lst.Add(new randomClass()); 
      lst.Add(new randomClass()); 

      ((ListBox)this.checkedListBox1).DataSource = lst; 
      ((ListBox)this.checkedListBox1).DisplayMember = "Name"; 
      ((ListBox)this.checkedListBox1).ValueMember = "IsChecked"; 


      for (int i = 0; i < checkedListBox1.Items.Count; i++) 
      { 
       randomClass obj = (randomClass)checkedListBox1.Items[i]; 
       checkedListBox1.SetItemChecked(i, obj.IsChecked); 
      } 
     } 
    } 

    public class randomClass 
    { 
     public bool IsChecked { get; set; } 
     public string Name { get; set; } 
     public randomClass() 
     { 
      this.IsChecked = true; 
      Name = "name1"; 
     } 
    } 

randomClass用於演示目的

+2

我已經在做這個。我來自WPF,我曾經將所有東西都綁定到屬性上,而我似乎無法向checkListBox添加綁定。「isChecked」屬性。我知道這個地產並不存在,所以我們怎麼能和它綁定呢?我只是想確保沒有隱藏的技巧可以讓我們做到這一點。 – FailedDev

+1

DisplayMember綁定,但ValueMember不會!!!沒有意義。我用你的循環成功。謝謝 –

+7

當然這不是__real雙向數據綁定。 – TaW

7

你可以找到答案在這裏:Using datasource with CheckBoxList

var checkBoxList = (ListBox)MyCheckBoxList; 
checkBoxList.DataSource = dataSource; 
checkBoxList.DisplayMember = "name"; 
checkBoxList.ValueMember = "enabled"; 

確保ValueMemberbool類型。

3

我剛剛如何在SQL數據綁定表到CheckBoxList的沒有壓力。我非常激動地分享它。 我手動添加他們...

 SqlConnection conn = new SqlConnection(); 
     SqlCommand cmd = new SqlCommand(); 
     conn.ConnectionString = "Data Source=MICMIKE\\SQLEXPRESS;Initial Catalog=Enterprise;Integrated Security=True"; 
     conn.Open(); 
     string query = "Select Position from Position";// position column from position table 
     cmd.Connection = conn; 
     cmd.CommandText = query; 

     SqlDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      string myItem = dr["Position"].ToString(); 
      checkedListBox1.Items.Add(myItem, true);//true means check the items. use false if you don't want to check the items or simply .....Items.Add(myItem); 
     } 

要訪問checklistbox檢查的項目,使用

 foreach(object item in Checkedlistbox1.CheckedItems) 
     { 
      string itemchecked = item.ToString(); 
      MessageBox.Show(itemchecked);// This will show all the checked items in the checklistbox. 
     } 

它是真正的工作。我剛剛拿到了。 我希望你喜歡它!