c#集合修改未在所有WinForms中生效

时间:2013-08-18 08:57:26

标签: c# linq-to-sql

我的项目的主要形式是表格1.这实际上是在搜索患者窗口。它有一个组合框,里面装满了DB的现有患者名单。这个comboBox提交了下面写的函数。从构造函数调用此函数。

    public void fillComboBox()
    {
        items.Clear();
        items.Add("Select Name");
        MainDataContext context = new MainDataContext(); //dotConnect Linq to sqlite
        var query = from p in context.Patients
                    orderby p.Name ascending
                    select p;
        foreach (Patient p in query)
        {
            items.Add(p.Name);
        }
        comboBox1.DataSource = items;
    }

(工作正常)。 items的类型为“List< string>”。在创建每个新表单时,我传递了form1的实例。像

  

Form3 f3 = new Form3(this);

确定患者后,控制权转至Form3显示患者信息或根据需要进行编辑(工作正常)。然后转到Form4为婴儿建立增长图表(Works Fine)。 添加新患者时会出现问题。 Control通过Button'New Patient'从Form1转到Form2。 在Form2中,我添加了一个患者,然后转到Form3和Form4(工作正常)。完成Form4后,控件将使用此代码转移到Form1

    Form1 f1;
    public Form4(Form1 f1)
    {            
        InitializeComponent(); //and etc
        this.f1 = f1;
    }
    //...other functions etc
    private void button4_Click(object sender, EventArgs e)
    {
        this.Close();
        f1.Show();
    }

但Form1中的comboBox未更新。它包含相同的旧列表。但是当我在Form4中创建一个新的Form1时,就像这样

private void button4_Click(object sender, EventArgs e)
    {
        this.Close();
        Form1 form1 = new Form1();
        form1.Show();
    }

然后它工作正常,但这样。将显示一个Form1实例,另一个隐藏。 如上所述,这个新的Form1将创建其子表格(2,3,4)。我不想这样,所以我回到了之前的解决方案(转到Form1而不在Form4中创建新实例)。但这导致组合框中没有更新(在Form1中),当我关闭我的程序时,它会给出错误。

  

收藏被修改;枚举操作可能无法执行;

在Form4中也尝试了这段代码

private void button4_Click(object sender, EventArgs e)
    {
        this.Close();
        f1.fillcombobox();
        f1.Show();
    }

我还尝试覆盖Form1的onShown和onLoad事件,但没有获得痛苦和徒劳。 然后我试了

  

Application.Restart();

插入患者后,在Form2中

。这肯定帮助了我。但导致另一个问题。控件转到Form1,我想在插入新患者后转到Form3。

请帮帮我。 我知道这是一个混乱,但你的帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

  

收藏被修改;枚举操作可能无法执行;

此错误表明您正在枚举一个集合(也许是一个foreach),同时您正在修改它。这是不允许的。您无法修改要枚举的集合。

您需要显示抛出异常的行。

答案 1 :(得分:1)

由于您似乎正在使用相同的列表实例(称为项目),并且我猜它是一个List对象,因此当列表内容发生更改时,控件不会收到通知,因此数据不会在UI中刷新。

您是否尝试过为物品集合使用BindingList?看this example