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. Redis记录-redis和memcached的区别

    1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还提供lis ...

  2. android studio run的时候一直卡在waiting for debug

    原因如下: 选择ok就可以,同时我们也可以从这里找到 平常遇到跟真机有关的问题,三步大法,1,插拔手机,2.adb kill-server;adb start-server 3.重启as

  3. [整理]解析Json需要设置Mime

    IIS6.0 1.打开IIS添加Mime项 关联扩展名:*.json内容类型(MIME):application/x-javascript 2.添加映射: 位置在IIS对应站点右键属性:”主目录”-” ...

  4. JS中一些常用的事件(笔记)

    window.onload事件:当文档和其所有外部资源(如图片)完全加载并显示给用户时就会触发它. window.onload = function (){ //当加载完当前页面和其所有外部资源(如图 ...

  5. C++ socket 网络编程 简单聊天室

    操作系统里的进程通讯方式有6种:(有名/匿名)管道.信号.消息队列.信号量.内存(最快).套接字(最常用),这里我们来介绍用socket来实现进程通讯. 1.简单实现一个单向发送与接收 这是套接字的工 ...

  6. python3之模块io使用流的核心工具

    1.io概叙 io模块提供了python用于处理各种类型I/O的主要工具,主要有三种类型的I/O:文本I/O,二进制I/O和原始I/O:这些都是通用类型,各种后备存储可使用其中的每一种类型,所以这些类 ...

  7. eclipse安装插件的常用方法

    安装插件1.从eclipse安装压缩jar包,如安装svn工具包:eclipse_svn_site-1.10.5.zip(不要解压)2.Help3.Install New Software,如下图,N ...

  8. LCT摘要

    介绍.用途 LCT是树链剖分中的一种,又叫实链剖分.动态树,常用于维护动态的树.森林. 维护方式 LCT并不直接维护原树,而是用一堆splay作为辅助树来维护.原树中的一条实链上的点在一棵splay中 ...

  9. zabbix3.0配置服务器流量告警

    zabbix配置流量告警 zabbix虽然已经对服务器的网卡流量进行了监控,但为了防止某台机器流量过高导致网络慢,或者因为中病毒或木马等原因,导致流量很高,可使用zabbix的流量告警功能来对流量进行 ...

  10. Cling项目demo实现Android+DLNA实现

    dlna多屏互动技术在Android和ios上面应用很广,所以自己为了学习,就官方提供的远吗进行了学习. http://4thline.org/projects/cling 由于是一个maven构建的 ...