我用下面的方法填充组合框,当我改变选择时,它在所有组合框中都改变了原因?
PowerProjectDBLinqDataContext dataContext =new PowerProjectDBLinqDataContext();
IEnumerable<Winding_Building_typeCombo> ls = dataContext.Winding_Building_typeCombos.ToList();
ComboBox cbx;
for (int i = 1; i <= windingCount; i++)
{
cbx=((ComboBox)WindingPanel.Controls["winding" + i].Controls["cbxWindingBildingType" + i]);
cbx.ValueMember = "id";
cbx.DisplayMember = "value";
cbx.DataSource = ls;
}
答案 0 :(得分:1)
答案可能不在此代码中。;
我想是因为组合框的所有组件都使用相同的引用。
你可能做过这样的事情var combo = new ComboBox();
ComboBox cb1 = combo;
ComboBox cb2 = combo;
ComboBox cb3 = combo;
编辑:oops是的,正如另一个人说的那样,你正在设置他们所有使用相同的数据上下文。即,当您更改datacontext中的选定值时,它们将全部更新以反映其上下文 - 即选择相同的行。
cbx.DataSource = ls;
这一行将它们全部设置为相同的东西。您需要在每种情况下获取datacontext的副本,以便每个组合指向唯一的datacontext。
试试这个
PowerProjectDBLinqDataContext dataContext =new PowerProjectDBLinqDataContext();
ComboBox cbx;
for (int i = 1; i <= windingCount; i++)
{
IEnumerable<Winding_Building_typeCombo> ls = dataContext.Winding_Building_typeCombos.ToList();
cbx=((ComboBox)WindingPanel.Controls["winding" + i].Controls["cbxWindingBildingType" + i]);
cbx.ValueMember = "id";
cbx.DisplayMember = "value";
cbx.DataSource = ls;
}
答案 1 :(得分:0)
我怀疑你只有一个cbx控件实例。因此,每次将cbx绑定到数据源时,实际上都会覆盖当前存在的数据绑定,最终控件将仅绑定到最后一个数据源。
答案 2 :(得分:0)
我试过这个方法并且它正在工作我在Context的位置创建了一个列表的图像以节省时间和内存
PowerProjectDBLinqDataContext dataContext =new PowerProjectDBLinqDataContext();
IEnumerable<Winding_Building_typeCombo> ls = dataContext.Winding_Building_typeCombos.ToList();
ComboBox cbx;
for (int i = 1; i <= windingCount; i++)
{
IEnumerable<Winding_Building_typeCombo> lsCopy = new List<Winding_Building_typeCombo>(ls);
cbx=((ComboBox)WindingPanel.Controls["winding" + i].Controls["cbxWindingBildingType" + i]);
cbx.DataSource = lsCopy;
lsCopy = null;
cbx.ValueMember = "id";
cbx.DisplayMember = "value";
}