有个子窗体,里面有个combobox,根据传入的参数,设置combobox的选中项。
当打开多个子窗体之后,之前打开的子窗体里面的combobox的选中项都会发生改变,变成与最新打开的那个窗体的选中项的值。
其他控件的值都不会受到影响,唯独combobox,请问如何解决?

解决方案 »

  1.   

                        MaintainCfgFrm maintainCfgFrm = new MaintainCfgFrm();
                        maintainCfgFrm.Name = "Form_" + snatchConfig.ConfigID.ToString();
                        maintainCfgFrm.Text = snatchConfig.ConfigName;
                        maintainCfgFrm.MdiParent = this;// 指向父窗体
                        maintainCfgFrm.CurrentConfig = snatchConfig;
                        maintainCfgFrm.Dock = DockStyle.Fill;
                        maintainCfgFrm.Show();
      

  2.   

    combobox是怎么赋值的? 是不是绑定了某个对象?
      

  3.   

    这个没问题哈~ 难道combobox是静态的?~
      

  4.   

    肯定是你检查不仔细。哪个地方给附值了。
    ___________________________________
    我写的vs2005源代码管理器,只有团队资源管理中源码管理的功能。
    http://topic.csdn.net/u/20091203/10/ca40b678-5443-4a18-a9f6-fad9051d0797.html
      

  5.   


    或者说 combobox绑定的值是一个静态对象?
      

  6.   

    原因很简单,你绑定到同一个数据源上了这个例子里改变一个会改变另一个using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;namespace WindowsFormsApplication30
    {
        public partial class Form1 : Form
        {
            WebBrowser WB = new WebBrowser();        public Form1()
            {
                InitializeComponent();            DataTable DT = new DataTable();
                DT.Columns.Add("c1");
                DT.Rows.Add(new Object[] { 1 });
                DT.Rows.Add(new Object[] { 2 });
                DT.Rows.Add(new Object[] { 3 });            ComboBox CB1 = new ComboBox();
                CB1.Parent = this;
                CB1.DataSource = DT;
                CB1.ValueMember = DT.Columns[0].ColumnName;            ComboBox CB2 = new ComboBox();
                CB2.Parent = this;
                CB2.DataSource = DT;
                CB2.ValueMember = DT.Columns[0].ColumnName;
                CB2.Location = new Point(0, 100);
            }
        }
    }
      

  7.   

    是的,combobox是绑定的,绑定的不是静态对象。
    目前暂时是通过窗体的Activated事件里重新设置combobox的Text值来解决这个问题的
    希望有更彻底的解决方法
      

  8.   

    如果combobox绑定了某个对象,那么这个对象改变,所有与之相关的combobox都改变了。你把你combobox赋值的代码贴出来看看。
    或者不要用绑定,用this.comboBox1.Items.Add(...)一条条添加试试。
      

  9.   

                ComboBox CB2 = new ComboBox();
                CB2.Parent = this;
                DataTable DT2 = DT.Clone();
                foreach (DataRow DR in DT.Rows)
                    DT2.ImportRow(DR);  
                CB2.DataSource = DT2;
                CB2.ValueMember = DT2.Columns[0].ColumnName;
      

  10.   


    不是数据源, 是数据源的 'View',如果用 DataTable, 同一个 DataTalbe, 分别创建不同的 'View', 作为下拉的数据源即可, 这个 'View' 就是 DataView,大多数情况下使用的是 table.DefaultView, 当然相互影响了.
    对 DataTable, 讨论过滤, 讨论排序 , 是无意义的, 也是错误的.
      

  11.   

    原因就是你 所有窗体传给combobox的值是同一个对象,也就是说绑定了同一个数据源.....解决吗..要么重新new一个数据源,要么对原来的数据源进行 深复制
      

  12.   

    重新new一个数据源不符合要求,如果多个窗体,那么就会有多份数据。
    既然没有好方法,就不便再探讨,结贴!