• C# listbox DataSource数据绑定--一年半以前的bug


    listbox使用DataSource进行数据绑定和删除,大家肯定都会,

    写这个随笔只是因为。。。。这是一年半以前刚进公司的我遗留的bug,现在看看当时竟然没有解决 - -

    现在写个测试程序,写个随笔记录一下,当时萌新的我。。。

    首先声明了一个类,要绑定的类型。

    //声明一个全局集合
    public List<BindingType> bi;
    //声明一个绑定类型的类
    public class BindingType
    {
        public string Name { get; set; }//名称
        public DateTime Time { get; set; }//时间
    }

    然后两个方法,一个添加,一个删除。问题就出现在删除当中。

     private void button1_Click(object sender, EventArgs e)
            {
                //初始化添加数据
                bi = new List<BindingType>()
                {
                    new BindingType { Name=Guid.NewGuid().ToString("N"),Time=DateTime.Now},
                    new BindingType { Name=Guid.NewGuid().ToString("N"),Time=DateTime.Now},
                    new BindingType { Name=Guid.NewGuid().ToString("N"),Time=DateTime.Now},
                    new BindingType { Name=Guid.NewGuid().ToString("N"),Time=DateTime.Now},
                };
    
                //绑定到listbox
                HashSet<BindingType> hs = new HashSet<BindingType>(bi);
                BindingSource bs = new BindingSource();
                bs.DataSource = hs;
                listBox1.DataSource = bs;
                listBox1.DisplayMember = "Name";
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                //删除集合选中数据
                foreach (BindingType item in listBox1.SelectedItems)
                {
                    bi.Remove(item);
                }
    
                //重新绑定新的集合  如果此处bi这个集合数据为空就会出现显示错误
                HashSet<BindingType> hs = new HashSet<BindingType>(bi);
                BindingSource bs = new BindingSource();
                bs.DataSource = hs;
                listBox1.DataSource = bs;
                listBox1.DisplayMember = "Name";
            }

    左边是添加效果图,右边是全部删除之后会提示绑定的错误。

          

    没有使用 Items 进行数据绑定是因为需要取绑定中的数据。

    当时记得弄了大半天都没有解决,最近刚好有个新的接口接入需要类似的功能,导致这个问题再次出现。。。

     想了一下使用 Remove,Clear是没办法删除的因为属于绑定数据,然后试试给他赋值一个新的 BindingSource。

                //删除集合选中数据
                foreach (BindingType item in listBox1.SelectedItems)
                {
                    bi.Remove(item);
                }
    
                if (bi.Count < 1)//结合没有数据
                {
                    //重新new
                    BindingSource bs = new BindingSource();
                    listBox1.DataSource = bs;
                }
                else
                {
                    //重新绑定新的集合  如果此处bi这个集合数据为空就会出现显示错误
                    HashSet<BindingType> hs = new HashSet<BindingType>(bi);
                    BindingSource bs = new BindingSource();
                    bs.DataSource = hs;
                    listBox1.DataSource = bs;
                    listBox1.DisplayMember = "Name";
                }

    到此。。。算是解决了不会显示错误,然后说看看这个DataSource是个什么东西,结果发现 “默认为null” 这几个字。。。。瞬间自己都笑了,

    直接 listBox1.DataSource = null; 

    当时的我还真的萌新。。这么简单的问题我竟然没有解决。。。活到老,学到老。

  • 相关阅读:
    iOS- 移动端Socket UDP协议广播机制的实现
    iOS- 三步快速集成社交化分享工具ShareSDK
    iOS- iOS 7 的后台多任务 (Multitasking) 对比之前的异同、具体机制、变化
    iOS- Exception异常处理
    17. Subsets【medium】
    zookeeper程序员指南
    error while loading shared libraries错误解决
    82. Single Number【easy】
    53. Reverse Words in a String【easy】
    查看linux内核和版本信息
  • 原文地址:https://www.cnblogs.com/psjinfo/p/10416524.html
Copyright © 2020-2023  润新知