2011-09-20 12 views
13

Tengo un checkboxbox con datos en un solo formulario y me gustaría saber si es posible enlazar la casilla de verificación de cada elemento del cuadro de lista con una determinada propiedad de un objeto.Winforms: Cómo vincular el elemento Checkbox de un CheckedListBox con enlace de datos

Gracias por cualquier ayuda de antemano :)

Editar: Tal vez fue mal interpretado mi pregunta.

Me gustaría saber si es posible enlazar la casilla de verificación de cada elemento de CheckedListBox. Sé cómo enlazar datos con una fuente y cómo cambiar programáticamente las entradas iterando a través de los itmes. Lo que no sé es si es posible tener una clase que implemente INotifyPropertyChanged para que cuando una propiedad "CheckedState" cambie, CheckedListBox se actualice a sí mismo.

Respuesta

30

Según la respuesta de Samich, Aquí está un ejemplo completo, la fuente de unión es un 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 es con fines de demostración

+2

Ya estoy haciendo esto. Vengo de WPF donde solía vincular todo a las propiedades y no parece poder agregar un enlace a la propiedad checkListBox. "IsChecked". Sé que la propiedad no existe, ¿cómo podríamos vincularnos a ella? Solo quiero asegurarme de que no haya un truco oculto que nos permita hacer esto. – FailedDev

+1

DisplayMember se une, pero ValueMember no lo hace!?! No tiene sentido. Utilicé tu bucle for con éxito. gracias –

+7

Por supuesto, esto no es __realmente enlace bidireccional de datos__. – TaW

7

Usted puede encontrar responder aquí: Using datasource with CheckBoxList

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

Asegúrese de que el ValueMember es de tipo bool.

3

simplemente me dieron la forma de databind una tabla en SQL a un CheckBoxList sin estres. Estoy más que emocionado de compartirlo. les añadí manualmente ...

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

Para acceder a los elementos seleccionados en el CheckListBox, utilice

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

Realmente está funcionando. Lo tengo ahora. ¡Espero que les guste!

Cuestiones relacionadas