2011-09-20 30 views
13

Mam checkbox listy wyboru w jednym formularzu i chciałbym wiedzieć, czy jest możliwe nawet databind pole wyboru każdego elementu listy z pewną właściwością obiekt.WinForm: Jak powiązać element Checkbox w CheckedListBox z databinding

Dzięki za wszelką pomoc z góry :)

EDIT: Być może moje pytanie zostało błędnie zinterpretowane.

Chciałbym wiedzieć, czy możliwe jest ustalenie bazy danych dla każdego elementu CheckedListBox. Wiem, jak powiązać bazę danych ze źródłem i jak programowo zmieniać wpisy przez iterowanie poprzez itmes. Nie wiem, czy możliwe jest posiadanie klasy , która implementuje INotifyPropertyChanged tak, że gdy właściwość "CheckedState" zmieni samą aktualizację CheckedListBox.

Odpowiedz

30

Według odpowiedź Samich, oto jest pełna przykładów, źródło wiążący jest 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 dla celów demonstracyjnych

+2

Już to robię. Pochodzę z WPF, gdzie użyłem do wiązania wszystkiego z właściwościami i nie wydaje mi się, żebym mógł dodać wiązanie do właściwości checkListBox. "IsChecked". Wiem, że własność nie istnieje, więc jak możemy ją związać? Po prostu chcę się upewnić, że nie ma ukrytej sztuczki, która pozwala nam to zrobić. – FailedDev

+1

DisplayMember wiąże, ale ValueMember nie! Nie ma sensu. Użyłem twojej pętli for z powodzeniem. dziękuje –

+7

Oczywiście nie jest to __real dwukierunkowe. – TaW

7

może znajdziesz odpowiedź tutaj: Using datasource with CheckBoxList

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

Upewnij się, że ValueMember jest typu bool.

3

Właśnie jak databind tabeli w sql do CheckBoxList bez stresu. Jestem bardziej niż podekscytowany, że mogę się nim podzielić. dodałem je ręcznie ...

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

Aby uzyskać dostęp do elementów sprawdzonych w checklistbox użyć

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

To naprawdę działa. Właśnie to dostałem. Mam nadzieję, że Ci się spodoba!