欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-24 10:12:40
listbox使用DataSource进行数据绑定和删除,大家肯定都会,写这个随笔只是因为。。。。这是一年半以前刚进公司的我遗留的bug,现在看看当时竟然没有解决 - -现在写个测试程序,写个随笔记录一下,当时萌新的我。。。首先声明了一个类,要绑定的类型。 //声明一个全局集合 public Lis ......

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

 

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

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

 

没有使用 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; 

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

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