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

标签 c# linq-to-sql

我的项目的主要表格是表格1。这实际上是搜索患者窗口。它有一个组合框,其中填充了数据库中现有患者的列表。该组合框包含如下所示的函数。该函数是从构造函数中调用的。

    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”。在创建每个新表单时,我都会传递 form1 的实例。喜欢

Form3 f3 = new Form3(this);

好的,找到患者后,控件将转到 Form3 以显示患者信息或根据需要进行编辑(工作正常)。然后进入 Form4 构建婴儿生长图表(效果很好)。 当我添加新患者时出现问题。 通过“新患者”按钮,控制从 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 中的组合框没有更新。它包含相同的旧列表。但是当我像这样在 Form4 中创建一个新的 Form1 时

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

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

Collection was modified; enumeration operation may not execute;

也在 Form4 中尝试过此代码

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

我也尝试重写 Form1 的 onShown 和 onLoad 事件,但没有收获,只是痛苦和徒劳。 然后我尝试了

Application.Restart();

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

请帮帮我。 我知道这很困惑,但我们将不胜感激您的帮助:)

最佳答案

Collection was modified; enumeration operation may not execute;

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

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

关于c# Collection 修改未在所有 WinForms 中生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18297437/

相关文章:

c# - 有没有办法在 SQL DataContext 上调用 ExecuteQuery 并返回 Tuple 而不是类/对象

c# - LINQ to SQL context.GetChanges

c# - 深入了解 .NET 框架中的 EqualsHelper 方法

c# 在不同的文化中转换日期时间

c# - 单击 WPF 中的按钮显示用户控件 (WPF) 查看页面

c# - 使用 forEach 迭代 IQueryable 与调用 ToList() 然后执行 forEach - 性能

C# Linq to SQL - IEnumerable 连接两个数据表/上下文

LINQ 连接错误

c# - 使用 '/' 分隔符从其余数据中拆分 Url

c# - 如何从 LINQ 将 Sql DateTime 设置为 null