Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中从另一个窗体调用方法#_C#_Mysql_Winforms_Entity Framework - Fatal编程技术网

C# 在C中从另一个窗体调用方法#

C# 在C中从另一个窗体调用方法#,c#,mysql,winforms,entity-framework,C#,Mysql,Winforms,Entity Framework,我希望当我在另一个表单(Form2)中插入或更新记录时,Form1上的DataGridView应该在每次操作后自动刷新(调用btnRefresh),或者最好等到所有更改操作完成,并使用所有更改更新DataGridView表单Form2的关闭事件 我相信在VB.NET中,这是通过Form1.DataGridView.Refresh实现的,但在C#中我不确定。有人告诉我,我使用属性将Form1上的DataGridView的引用传递到Form2,但由于我是C#新手,我不知道如何传递。我如何解决这个问题

我希望当我在另一个表单(
Form2
)中插入或更新记录时,
Form1
上的
DataGridView
应该在每次操作后自动刷新(调用
btnRefresh
),或者最好等到所有更改操作完成,并使用所有更改更新
DataGridView
表单
Form2
的关闭事件

我相信在VB.NET中,这是通过
Form1.DataGridView.Refresh
实现的,但在C#中我不确定。有人告诉我,我使用属性将
Form1
上的
DataGridView
的引用传递到
Form2
,但由于我是C#新手,我不知道如何传递。我如何解决这个问题

我的刷新按钮代码:

private void btnRefresh_Click(object sender, EventArgs e)
{
    GVThesis.DataSource = thesisRepository.GetThesis();
    GVThesis.Refresh();
}

首先,将刷新代码包装到自己的方法中,并从click事件处理程序方法调用该方法,如下所示:

    private void btnRefresh_Click(object sender, EventArgs e) 
    { 
        this.RefreshData();
    }

    public void RefreshData()
    {
        GVThesis.DataSource = thesisRepository.GetThesis(); 
        GVThesis.Refresh(); 
    }
public partial class Form2 : Form
{
    private Form1 frm1;

    public Form2()
    {
        InitializeComponent();
    }

    public Form2(Form1 otherForm)
    {
        InitializeComponent();
        this.frm1 = otherForm;
    }
}
然后,如果您正在从Form1实例化并启动新表单(Form2),只需进入Form2的代码并创建一个新的构造函数重载,它将接受对Form1的引用,并将其存储在一个私有变量中,如下所示:

    private void btnRefresh_Click(object sender, EventArgs e) 
    { 
        this.RefreshData();
    }

    public void RefreshData()
    {
        GVThesis.DataSource = thesisRepository.GetThesis(); 
        GVThesis.Refresh(); 
    }
public partial class Form2 : Form
{
    private Form1 frm1;

    public Form2()
    {
        InitializeComponent();
    }

    public Form2(Form1 otherForm)
    {
        InitializeComponent();
        this.frm1 = otherForm;
    }
}
然后,您可以在Form2中的任意位置调用“刷新”,如下所示:

this.frm1.RefreshData();

编辑:

我创建了一个小样本,我无法将其上传到这里……但这里是VS中程序本身的屏幕截图,以及运行该程序和执行该功能的结果的屏幕截图……希望这会有所帮助。

程序(如果视图太小,则缩放视图)


结果是:

查看我使用您的解决方案尝试的观察者设计模式。但我得到的NullReferenceException是未处理的错误。顺便说一下,我的表单2是这样的:OtherForm2=新的otherForm();Form2.StartPosition=FormStartPosition.CenterParent;表2.ShowDialog(本);我用一个示例应用程序的两个屏幕截图更新了答案,该应用程序基本上执行了我认为您正在尝试的操作。请稍等,让我知道您的想法。哦,我从您的评论中看到,您需要将对Form1的引用传递到构造函数中,或者至少作为调用Form2的参数。将“this”传递到.ShowDialog方法不会起作用。仔细看一看我发布的截图,你应该会在那里看到方法。祝你好运