2011-09-20 39 views
13

Tôi có một hộp kiểm tra databinded trong một biểu mẫu và tôi muốn biết nếu nó thậm chí có thể databind hộp kiểm của mỗi mục hộp danh sách với một tài sản nhất định một đối tượng.Winforms: Làm thế nào để ràng buộc mục Checkbox của CheckedListBox với databinding

Nhờ sự giúp đỡ trước :)

Edit: Có lẽ câu hỏi của tôi được chẩn đoán nhầm.

Tôi muốn biết liệu có thể databind hộp kiểm cho mỗi Mục của CheckedListBox hay không. Tôi biết làm thế nào để databind đến một nguồn và làm thế nào để programatically thay đổi các mục bằng cách iterating qua itmes. Những gì tôi không biết là nếu nó có thể có một lớp học mà thực hiện INotifyPropertyChanged để khi một tài sản "CheckedState" thay đổi bản cập nhật CheckedListBox chính nó.

Trả lời

30

Theo câu trả lời Samich của, đây là một ví dụ đầy đủ, nguồn ràng buộc là một 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 là dành cho mục đích trình diễn

+2

Tôi đã làm điều này. Tôi đến từ WPF, nơi tôi được sử dụng để ràng buộc tất cả mọi thứ để tài sản và tôi dường như không thể thêm một ràng buộc vào checkListBox. "IsChecked" tài sản. Tôi biết tài sản không tồn tại để làm thế nào chúng ta có thể liên kết với nó? Tôi chỉ muốn chắc chắn rằng không có một thủ thuật ẩn nào cho phép chúng ta làm điều này. – FailedDev

+1

DisplayMember liên kết nhưng ValueMember thì không!?! Không có ý nghĩa. Tôi đã sử dụng vòng lặp của bạn với thành công. thanks –

+7

Tất nhiên điều này không phải là __real hai chiều__ databinding. – TaW

7

Bạn có thể tìm thấy câu trả lời ở đây: Using datasource with CheckBoxList

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

Hãy chắc chắn rằng ValueMember là loại bool.

3

Tôi chỉ có làm thế nào để DataBind một bảng trong sql để một CheckBoxList không căng thẳng. Tôi vui mừng hơn khi chia sẻ nó. tôi đã thêm chúng bằng tay ...

 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); 
     } 

để truy cập các mục kiểm tra trong CheckListBox, sử dụng

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

Nó thực sự đang làm việc. Tôi đã có nó ngay bây giờ. Tôi hy vọng bạn thích nó!

Các vấn đề liên quan