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

            )//结合没有数据
            {
                //重新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的更多相关文章

  1. Silverlight中ListBox的数据绑定

    在Silverlight中ListBox是一个非常强大的控件.总结下ListBox的绑定数据的方式. 首先,新建一个Book类, public class Book { public string B ...

  2. VUE的一个数据绑定与页面刷新相关的bug

    1.场景: N层嵌套的循环查询业务场景,框架是vue.其中在最后一层查完之后,还需要查其中每一项的两个属性,类型都是列表.查完之后将其赋值给一个变量用于页面展示.代码如下: (1)异常代码: getS ...

  3. ListBox和ComboBox绑定数据简单例子

    1. 将集合数据绑定到ListBox和ComboBox控件,界面上显示某个属性的内容 //自定义了Person类(有Name,Age,Heigth等属性) List<Person> per ...

  4. 027. asp.net中数据绑定控件之 GridView控件

    GridView控件支持下面的功能: 绑定至数据源控件, 如SqlDataSource 内置排序功能 内置更新和删除功能 内置分页功能 内置行选择功能 可以编程方式访问GridView对象模型以动态设 ...

  5. 4_1 wp8数据绑定与独立存储空间[wp8特色开发与编程技巧]

    Wp8数据绑定与独立存储空间 数据绑定为基于 Silverlight 的应用程序提供了一种显示数据并与数据进行交互的简便方法. 数据的显示方式独立于数据的管理. UI 和数据对象之间的连接或绑定使数据 ...

  6. Windows App开发之集合控件与数据绑定

    为ListView和GridView加入数据 ListView採用垂直堆叠得方式显示数据.而GridView则採用水平堆叠得方式. 长相的话嘛,它们都几乎相同. <Grid Name=" ...

  7. Windows phone应用开发[21]-图片性能优化

    在windows phone 中常在列表中会常包含比较丰富文字和图片混排数据信息. 针对列表数据中除了谈到listbox等控件自身数据虚拟化问题外.虽然wp硬件设备随着SDK 8.0 发布得到应用可使 ...

  8. C#.NET 通用控件数据源绑定类

    using System.Data; using System.Collections; using System.Collections.Generic; using System.Web.UI; ...

  9. ASP.NET 页生命周期

    ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码以及进行 呈现.了解页生命周期非常重要,因为这样 ...

随机推荐

  1. ubuntu14的unity desktop显示异常

    在多用户下,卸载compiz后某个单一用户出现菜单栏和任务栏图标消失的情况. 这时,需要在图形界面下重置compiz $dconf reset -f /org/compiz/ 重启unity $set ...

  2. Excel:函数中的万金油:INDEX+SMALL+IF+ROW

      很多人在Excel中用函数公式做查询的时候,都必然会遇到的一个大问题,那就是一对多的查找/查询公式应该怎么写?大多数人都是从VLOOKUP.INDEX+MATCH中入门的,纵然你把全部的多条件查找 ...

  3. CentOS 6.8下安装python的redis支持库

    方法很简单,SSH登录下输入: pip install redis 或者 easy_install redis 如果上面的方法不行的话,就要尝试编译安装了 wget https://pypi.pyth ...

  4. vue之props父子组件之间的谈话

    眨眼就来杭州两年了,时间真快. 我们今天来说说vue的一个api---->props 首先我们先看看一个例子,是我一个项目中写的. 看到这个:有木有一点懂了.要是没懂,继续往下看 这里我们用到了 ...

  5. css3 @keyframes用法

    使用@keyframes规则,可以创建动画. 在动画的过程中,可以多次更改css样式的设定. 对于指定的变化:发生时用0%,或关键字“from”和“to”,这与0%和100%相同. 0%:开头动画. ...

  6. bzoj千题计划250:bzoj3670: [Noi2014]动物园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...

  7. 《Linux命令行与shell脚本编程大全》第十一章 构建基本脚本

    11.1使用多个命令 $date;who   //  命令列表,加入分号就可以,这样会依次执行.参见5.2.1节 注意区分$(date;who),这个是进程列表,会生成一个子shell来执行 Shel ...

  8. [转载]Supporting OData $inlinecount with the new Web API OData preview package

    http://www.strathweb.com/2012/08/supporting-odata-inlinecount-with-the-new-web-api-odata-preview-pac ...

  9. CS229 笔记06

    CS229 笔记06 朴素贝叶斯 事件模型 事件模型与普通的朴素贝叶斯算法不同的是,在事件模型中,假设文本词典一共有 \(k\) 个词,训练集一共有 \(m\) 封邮件,第 \(i\) 封邮件的词的个 ...

  10. c++刷题(37/100)笔试题2

    4道题2小时,又是一道,不过这次的比较难,但第二道不应该的,又是审题不仔细导致没过 题目1: 给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”.比如字符串AAAABCC ...