【问题标题】:C# - Combobox update on form showC# - 表单显示上的组合框更新
【发布时间】:2014-11-01 14:53:56
【问题描述】:

一开始我使用的是 Sql Server Local DBLinq to Sql。我有两个表格 Form1 和 Form2。 Form1 中有一个组合框,我想在每次显示时对其进行更新。 Form2 插入新记录,Form1 用于搜索记录。当我回到Form1时插入一条记录后。它不会更新列表。 我尝试了 Form1 的 ShownActivated 以及 Form2 的 onClosing 事件,但没有成功。 我也尝试了组合框的 Enter 事件。尽管数据库已更新,但组合框未更新。 这就是我更新组合框的方式

_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 中)我插入的新数据,那么它会完美地找到记录,而不是更新组合框。

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 的任何事件调用中调用此函数都可以完成工作。谁能告诉我为什么它在我上面的问题中描述的场景中不起作用?

【问题讨论】:

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


    【解决方案1】:

    我猜这可能与 LINQ 中的数据缓存有关。 在 Form2 中创建新记录后,您是否尝试过refreshing the DataContext 或刷新?

    【讨论】:

    • 如何刷新数据上下文
    • 查看我更新的帖子,它现在包含一个指向Refresh() 方法的超链接。
    • !我应该把什么作为对象。是数据上下文吗?
    • 在您帖子中的 Update_1 之后,问题似乎不是 DataContext。你写的是 Form1 然后找到新记录。那么我是否正确地看到您的方法getNames() 没有被调用?你调试了吗?如果这是问题所在,那么 heathesh 发布的解决方案应该可以工作。
    【解决方案2】:

    试试这个,将Form1上的组合框更新方法设为public,然后在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();
    }
    

    【讨论】:

    • 这也不能解决问题。除非我重新启动应用程序。
    • 更新我的问题。
    【解决方案3】:

    您必须尝试代理:我正在粘贴与您的场景相关的工作项目的 URL

    https://drive.google.com/file/d/0B893d39kVeIvcGhjUG80ZG05OWc/edit?usp=sharing

    【讨论】:

    • 我没明白你想教我什么。抱歉,您能否详细说明在您的应用中具体看到的内容?
    • 这里我附上了 C# 项目,用于从另一个表单的按钮更新 gridview 而无需关闭任何表单。只需从链接下载项目并检查...即使你没有得到,我也可以在这里粘贴代码..
    猜你喜欢
    • 2011-12-21
    • 2021-12-07
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多