我的项目的主要形式是表格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事件,但没有获得痛苦和徒劳。 然后我试了
插入患者后,在Form2中Application.Restart();
。这肯定帮助了我。但导致另一个问题。控件转到Form1,我想在插入新患者后转到Form3。
请帮帮我。 我知道这是一个混乱,但你的帮助将不胜感激:)
答案 0 :(得分:1)
收藏被修改;枚举操作可能无法执行;
此错误表明您正在枚举一个集合(也许是一个foreach),同时您正在修改它。这是不允许的。您无法修改要枚举的集合。
您需要显示抛出异常的行。
答案 1 :(得分:1)
由于您似乎正在使用相同的列表实例(称为项目),并且我猜它是一个List对象,因此当列表内容发生更改时,控件不会收到通知,因此数据不会在UI中刷新。
您是否尝试过为物品集合使用BindingList?看this example