1

也许这对你们 .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;

我不喜欢这样,因为当真正需要一个变量时它会复制变量。这是处理这种情况的好方法还是我还能做些什么?

谢谢

4

2 回答 2

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 的对象,那么在 ComboList 中实现接口 icloneable 或使用任何其他方式来创建浅拷贝。

于 2012-09-01T10:25:26.287 回答
0

BindingContext表单会自动为表单上支持数据绑定的所有对象创建一个默认值。BindingContext允许表单知道该对象中集合条目的计数和当前位置。当您在第一个列表中选择一个项目时,您会更改其位置,并且由于其他两个控件绑定到相同的BindingContext,它们也都会更改。要解决此问题,只需BindingContext为每个控件创建一个不同的控件,如下所示:

ddlNomRue.BindingContext = new BindingContext();
ddlDe.BindingContext = new BindingContext();
ddlA.BindingContext = new BindingContext();

现在您可以将相同的绑定ComboList到所有三个控件,您仍然会得到您想要的行为。

于 2012-09-01T01:25:59.343 回答