Winforms: как связать элемент Checkbox CheckedListBox с привязкой данных
У меня есть checktedbox с привязкой к данным в одной форме, и я хотел бы знать, возможно ли даже привязать этот блок к каждому элементу списка с определенным свойством объекта.
Спасибо за любую помощь заранее:)
Изменить: Возможно, мой вопрос был неверно истолкован.
Я хотел бы знать, возможно ли привязать привязку к каждому элементу CheckedListBox. Я знаю, как привязывать данные к источнику и как программно изменять записи путем итерации через itmes. То, что я не знаю, - это если у вас есть класс
который реализует INotifyPropertyChanged, так что когда свойство CheckedState изменяет само обновление CheckedListBox.
Ответы
Ответ 1
В соответствии с ответом Самиха. Вот полный пример, источник привязки - 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
Здесь вы можете найти ответ: Использование источника данных с CheckBoxList
var checkBoxList = (ListBox)MyCheckBoxList;
checkBoxList.DataSource = dataSource;
checkBoxList.DisplayMember = "name";
checkBoxList.ValueMember = "enabled";
Убедитесь, что ValueMember
имеет тип bool
.
Ответ 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);
}
Чтобы получить доступ к элементам, отмеченным в контрольном списке, используйте
foreach(object item in Checkedlistbox1.CheckedItems)
{
string itemchecked = item.ToString();
MessageBox.Show(itemchecked);// This will show all the checked items in the checklistbox.
}
Это действительно работает. Я просто получил его сейчас.
Надеюсь, вам понравится!