首先我使用的是 Sql Server Local DB 和 Linq to Sql 。我有两种形式Form1和Form2。 Form1中有一个comboBox,我想在每次显示时更新它。 Form2插入新记录,Form1用于搜索记录。我回到Form1后插入记录后。它不会更新列表。 我已经尝试过Form1的显示和激活以及Form2的 onClosing 事件,但没有运气。 我也尝试过针对comboBox的输入事件。虽然数据库已更新,但comboBox不是。 这就是我更新我的comboBox
的方式_Namelist.Clear();
_Namelist.Add("Select a Name");
_Namelist.AddRange((from p in context.Peoples
select p.Name).ToList());
comboBox1.DataSource = _Namelist;
我创建了一个单独的class,使我的主窗体FORM1成为单身。 为了显示Form1,我使用了这个
FormProvider.Form_1.Show();
在这种情况下,我如何更新我的组合框?
Update_1
如果我尝试搜索(在Form1中)我插入的新数据(在Form2中),那么它会完美地找到记录,而不是更新comboBox。
Update_2
我刚刚制作了一个新的
public class Database
{
static DataContext context;
public static List<string> getNames()
{
context = new DataContext();
List<string> _names = new List<string>();
_names.Add("Select a Name");
_names.AddRange((from p in context.People
select p.Name).ToList());
return _names;
}
}
在Form1的任何事件调用中调用此函数正在执行此任务。谁能告诉我为什么它在我上面提到的情景中没有起作用呢?
答案 0 :(得分:0)
我猜它可能与LINQ中的数据缓存有关。 您是否在Form2中创建新记录后尝试refreshing the DataContext或刷新?
答案 1 :(得分:0)
试试这个,让方法更新Form1上的组合框,然后在Form2的close事件上调用方法:
所以在Form1上:
public void PopulateNamelistComboBox()
{
_Namelist.Clear();
_Namelist.Add("Select a Name");
_Namelist.AddRange((from p in context.Peoples
select p.Name).ToList());
comboBox1.DataSource = _Namelist;
}
然后在构造函数的Form2上,添加事件处理程序以调用close事件:
public Form2()
{
Closed += Form2_Closed;
}
然后在Form2上添加方法:
private void Form2_Closed(object sender, EventArgs e)
{
FormProvider.Form_1.PopulateNamelistComboBox();
}
答案 2 :(得分:0)
您必须尝试代理:我正在粘贴与您的方案相关的工作项目的URL
https://drive.google.com/file/d/0B893d39kVeIvcGhjUG80ZG05OWc/edit?usp=sharing