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()复制一个给它,以避免因为绑定的是同一个数据,而使某一个控件的行为会影响到绑定了同数据源的其他控件

时间: 2024-11-05 23:35:27

Winform中多个ComboBox联动问题的相关文章

winform中DataGridView添加ComboBox的最终解决方案(点击ComboBox默认显示当前行的内容)

第一: 数据绑定ComBoBox控件 先在窗体设计时拖一个ComBoBox控件,然后在里面的ITEMS设好你要下拉项,或者从数据库中的表绑定,这个估计都会. 第二: // 将下拉列表框加入到DataGridView控件中,这句放在绑定DataGridView之后写. 在窗体的Load方法中加入:g_DataGridView.Controls.Add(g_ComBoBox);也就是把ComBoBox控件添加到DataGridView控件中第三: 在DataGridView控件的CurrentCel

winform中的ComboBox同时设置text和value的方法

winform中的ComboBox不能像webform中的dropdownlist控件一样,在属性中可以同时设置text和value值,可以通过编写一个新类来实现这个功能. 1.首先在form1中添加一个新类ComboBoxItem: public class ComboBoxItem  {   private string _text=null;   private object _value=null;   public string Text{get{return this._text;}

c#(winform)中ComboBox添加Key/Value项、获取选中项、根据Key

WinForm下的ComboBox默认是以多行文本来设定显示列表的, 这通常不符合大家日常的应用, 因为大家日常应用通常是键/值对的形式去绑定它的. 参考了一些网上的例子,最终写了一个辅助类用于方便对ComboBox的操作: 用下面这个类的实例作为ComboBox的添加项: using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; namespace tp7309.

winform中的ListBox和ComboBox绑定数据用法实例

本文实例讲述了winform中的ListBox和ComboBox绑定数据用法.分享给大家供大家参考.具体实现方法如下: 本例实现将集合数据绑定到ListBox和ComboBox控件,界面上显示某个属性的内容,代码如下: 代码如下: //- //自定义了Person类(有Name,Age,Heigth等属性) List<Person> persons=new List<Person>(); persons.Add(new Person("WuMiao",18,17

Winform中DataGridView网格添加ComBoBox

在工作中遇到需要在DataGridView网格中添加ComBoBox的需求.解决后记录 1 在窗体类中声明一个全局的变量ComBoBox,并在Form的Load事件中设置号ComBoBox的下拉选项 2 在DataGridView绑定完数据源之后,将ComBoBox添加到DataGridView中 3 编写DataGridView的CurrentCellChanged事件和ComBoBox的SelectedIndexChanged事件 完整代码如下: public partial class F

vs2013+MVC3.0+EasyUI的ComboBox联动使用(二)

?? vs2013+MVC3.0+EasyUI的ComboBox联动使用(二) 简单介绍:在vs2013(.net4.0)中使用MVC3.0对于EasyUI中ComboBox的联动使用. 载入ComboBox数据,而且实现联动效果, 本文将採用EasyUI中的Date控件与ComboBox实现联动效果,如图: ----------------------------------------------------------------------------------------------

Extjs4 Combobox 联动始终出现loading错误的解决办法

当重复选者combobox 联动时,下级的Combobox 会出现loading的错误表现形式,虽然Store数据已加载完也是一样. 废话少说贴代码就知道如何处理了:(注意红色部分的关键语句) }, { xtype:'combobox', labelStyle:'color:blue;', labelWidth : 70,//标签宽度 width : 200,//字段宽度 msgTarget: 'side', allowBlank: false,    //是否允许空值 labelStyle:'

WinForm中变Enter键为Tab键实现焦点转移的方法

if (e.KeyCode == Keys.Enter) { //this.SelectNextControl(this.ActiveControl,true, true, true, true); SendKeys.Send("{Tab}"); //向活动应用程序发送击键 注意格式:Send("{Tab}");中的{} } /// <summary> /// 窗体控件控制相关的方法 /// </summary> public class C

FormView控件的InsertItemTemplate中3个DropDownList联动及绑定问题

在InsertItemTemplate中DropDownList联动和绑定不能同时实现,需要去掉SelectedValue='<%# Bind("CompanyID") %>即可实现联动,另外SqlDataSource应该放在InsertItemTemplate中. <%@ Page Title="" Language="VB" MasterPageFile="~/Manage/Site.master" Au