C# - 表单上的Combobox更新显示

时间:2014-09-08 11:36:52

标签: c# winforms linq-to-sql combobox

首先我使用的是 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的任何事件调用中调用此函数正在执行此任务。谁能告诉我为什么它在我上面提到的情景中没有起作用呢?

3 个答案:

答案 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