【问题标题】:CheckedListBox binding update DataSourceCheckedListBox 绑定更新 DataSource
【发布时间】:2014-11-12 17:00:41
【问题描述】:

这是我的代码。当用户选中/取消选中 CheckedListBox 中的项目时,我想更新数据源。但是当我转储数据源时,什么都没有改变。为什么?

BindingSource source = new BindingSource();

IList<MyStr> list = new List<MyStr>();
list.Add(new MyStr() { Index = 0, Name = "A", Checked = false });
list.Add(new MyStr() { Index = 1, Name = "B", Checked = false });
list.Add(new MyStr() { Index = 2, Name = "C", Checked = true });
list.Add(new MyStr() { Index = 3, Name = "D", Checked = false });
list.Add(new MyStr() { Index = 4, Name = "E", Checked = false });

source.DataSource = list;

((ListBox)this.cbList).DataSource = source;
((ListBox)this.cbList).DisplayMember = "Name";
((ListBox)this.cbList).ValueMember = "Checked";

public class MyStr
{
    public int Index { get; set; }
    public String Name { get; set; }
    public bool Checked { get; set; }

}

【问题讨论】:

    标签: c# winforms checkedlistbox


    【解决方案1】:

    不幸的是,CheckedListBox 不支持该功能,这就是设计器中对您隐藏 DataSource 属性的原因。

    你必须自己做管道:

    ((ListBox)this.cbList).DataSource = source;
    ((ListBox)this.cbList).DisplayMember = "Name";
    ((ListBox)this.cbList).ValueMember = "Checked";
    for (int i = 0; i < list.Count; ++i) {
      cbList.SetItemChecked(i, list[i].Checked);
    }
    this.cbList.ItemCheck += (sender, e) => {
      list[e.Index].Checked = (e.NewValue != CheckState.Unchecked);
    };
    

    【讨论】:

    • 感谢您的澄清。为什么 MS 没有实现这个?
    • @Helic 我不为微软工作,所以我不知道。尝试支持将选中项映射到类中的属性可能存在太多问题。
    猜你喜欢
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多