zoukankan      html  css  js  c++  java
  • Winform中多个ComboBox联动问题

    本人在窗体中添加了一个FlowLayoutPanel控件flpControlContain,为了能让控件自动排位(省了自己控制位置)代码如下:
    //在窗体中添加一个按钮,每当该按钮点击一次,添加一个下拉框 
    private void btnAddNew_Click(object sender, EventArgs e)
    {
    this.ConditonCount++;//是一个私有字段,用于记录当前添加的是第几个,每添加一个自增1
    //添加列名下拉列表
    ComboBox cmb = new ComboBox();
    cmb.Name = "列"+ConditonCount;//设置控件名称,用于在夫容器查询到该控
    cmb.Width = SELECTWIDTH;//设置宽度,该值是一个常量
    cmb.DataSource = this._columnslist;//绑定了一个字符串集合作为数据源
    cmb.Tag = ConditonCount;//设置标识,为第几个
    cmb.DropDownStyle = ComboBoxStyle.DropDownList;//设置下拉框下拉方式为只能选不能输入
    cmb.SelectedIndexChanged += Cmb_SelectedIndexChanged;//绑定列名下拉框选项修改事件,目前只在该事件中输出控件的Tag
    this.flpControlContain.Controls.Add(cmb);//添加到FlowLayoutPanel
    }
    当多个ComboBox添加到FlowLayoutPanel后,我这里绑定的下拉框数据源都是一样的,就会出现当一个下拉框选中某一项之后,所有的下拉框都会去选中同一选项!但是下拉框选中项改变事件只触发一次!!!!!!

    于是弱弱的去贴吧问大神了~~得到的回答是:

    -------------------------------------------------------------

    cmb.DataSource = this._columnslist;
    尝试修改为
    cmb.DataSource = this._columnslist.ToList() ;

    ----------------------------------------------------------

    最后试了下,成功了!问题就来了,是不是和绑定的是同一个数据源就关系,于是自己新建了一个窗体,手动添加两个ComboBox,但是给他们绑定的都是同一个List集合

    实验发现还是会联动(选中ComboBox1中的一项,ComboBox2中也会选中同一项)!!!!!!

    但是问题又来了:为什么绑定同一个数据源,会影响到控件的行为?可惜:贴吧大神没有告诉我!!!

    于是结论:多个控件绑定同一个数据源会影响到控件的行为(至少ComboBox会),于是建议数据源是List时使用List.ToList()方法,返回一个新的List,如果是DataTable就使用DataTable.copy()复制一个给它,以避免因为绑定的是同一个数据,而使某一个控件的行为会影响到绑定了同数据源的其他控件

    在问题解决之后又开始无尽的百度,想知道为什么于是找到一篇神迹般的文章,地址贴上:http://www.360doc.com/content/12/0812/09/466494_229704176.shtml

    学习了!膜拜大神

  • 相关阅读:
    让程序只有一个进程实例在运行
    HDFS写入和读取流程
    HBase技术详细介绍
    Eclipse下配置使用Hadoop插件
    Hadoop节点热拔插
    剖析为什么在多核多线程程序中要慎用volatile关键字?
    MapReduce 模式、算法和用例(MapReduce Patterns, Algorithms, and Use Cases)
    并行编程中的“锁”难题
    配置 eclipse 编译、开发 Hadoop(MapReduce)源代码
    HBASE松散数据存储设计初识
  • 原文地址:https://www.cnblogs.com/wuding/p/4747535.html
Copyright © 2011-2022 走看看