对于.NET家伙来说,这可能是一个非常简单的问题,但由于我来自MFC C ++开发团队,这种行为都让我们的开发团队想知道发生了什么。 (在MFC中,当我们创建下拉数据源时,源是共享的,但每个下拉列表的值不受影响)
这是一个非常简单的情况。我的表格中有3个下拉列表要求街道。你所在的街道和其他2条最近的街道。这些下拉列表中的每一个都具有相同的数据源。所以我们所做的就是(顺便说一下,ComboList只是一个继承ListItem的类,还有更多的函数)
//Combo Street
ComboList cboNomRue = new ComboList();
Tools.GetCombo(cboNomRue, Tools.ComboTypeRt.RT_NOM_RUE, true, true);
ddlNomRue.DisplayMember = "Numero";
ddlNomRue.ValueMember = "ID";
ddlNomRue.DataSource = cboNomRue;
//Combo Street From
ddlDe.DisplayMember = "Numero";
ddlDe.ValueMember = "ID";
ddlDe.DataSource = cboNomRue;
//Combo Street To
ddlA.DisplayMember = "Numero";
ddlA.ValueMember = "ID";
ddlA.DataSource = cboNomRue;
使用此代码,当用户更改ddlNomRue中的值时,3下拉列表会更改为该值!所以为了解决这个问题,我做到了。
//Combo Street
ComboList cboNomRue = new ComboList();
Tools.GetCombo(cboNomRue, Tools.ComboTypeRt.RT_NOM_RUE, true, true);
ddlNomRue.DisplayMember = "Numero";
ddlNomRue.ValueMember = "ID";
ddlNomRue.DataSource = cboNomRue;
ComboList cboNomRue2 = new ComboList(cboNomRue);
ComboList cboNomRue3 = new ComboList(cboNomRue);
//Combo Street From
ddlDe.DisplayMember = "Numero";
ddlDe.ValueMember = "ID";
ddlDe.DataSource = cboNomRue2;
//Combo Street To
ddlA.DisplayMember = "Numero";
ddlA.ValueMember = "ID";
ddlA.DataSource = cboNomRue3;
我不喜欢这个,因为当只需要一个变量时,它就是重复变量。这是处理这种情况的好方法还是我还能做什么呢?
由于
答案 0 :(得分:1)
我不清楚你使用的ComboList类,但是如果使用List来存储要在comboBox中显示的项目是更好的选择。
由于一次又一次地创造物体,你所采用的方式并不好。要解决这个问题,请使用List并将其命名为AsReadOnly();
示例:
List<string> Mylist = new List<string>();
Mylist.Add("salman");
Mylist.Add("khan");
Mylist.Add("yousafzai");
Mylist.Add("ranizai");
Mylist.Add("kachokhail");
this.tUsersTableAdapter.Fill(this.dbAIASDataSet.tUsers);
comboBox1.DataSource = Mylist.AsReadOnly();
comboBox1.DisplayMember = "ID";
comboBox1.ValueMember = "ID";
comboBox2.DataSource = Mylist.AsReadOnly();
comboBox2.DisplayMember = "ID";
comboBox2.ValueMember = "ID";
但是如果你必须使用ComboList的Object,那么在ComboList中实现icloneable接口或使用任何其他方式来创建浅拷贝。
答案 1 :(得分:0)
表单自动为表单上支持数据绑定的所有对象创建默认BindingContext
。 BindingContext
允许表单知道该对象中集合条目的计数和当前位置。当您在第一个列表中选择一个项目时,您可以更改其位置,并且由于其他两个控件都使用相同的BindingContext
绑定,因此它们也会更改。要解决此问题,只需为每个控件创建一个不同的BindingContext
,如下所示:
ddlNomRue.BindingContext = new BindingContext();
ddlDe.BindingContext = new BindingContext();
ddlA.BindingContext = new BindingContext();
现在,您可以将相同的ComboList
绑定到所有三个控件,您仍然可以获得所需的行为。