2014-11-05 51 views
3

我有一个窗体,里面有一个datagridview。在另一个已经打开的窗体上执行函数

双击datagridview中的一行时,将打开另一个表单,这基本上是一种表单,您可以在其中编辑刚刚双击的数据。

此“编辑”窗体中有3个按钮,即删除,更新和返回主窗体按钮。

当你在这张表上完成你应该做的事情后,它会关闭。

我的问题是;

当这个表单关闭时,我想要刷新主窗体中datagridview内部的数据,我怎样从编辑窗体调用主窗体上的那个函数。

请记住,我已经有一个重载功能,我们说它叫做refreshData();.

+0

你是用'.Show()'还是'.ShowDialog()'打开窗体? – 2014-11-05 14:43:26

+0

将该方法作为委托传递给新窗体/对话框窗口的构造函数,在请求时调用。 – Landern 2014-11-05 14:44:37

+0

我用.ShowDialog() – AlbA 2014-11-05 14:44:49

回答

1

如果您使用.ShowDialog()那么就把刷新功能放在这行代码下面。

该计划将继续与

private void cell1_DoubleClick(object sender, System.EventArgs e) 

功能。

因此,你的代码看起来相似;

private void cell1_DoubleClick(object sender, System.EventArgs e) 
{ 
    //Your previous code .... 

    //The part where you open the EditForm 
    MyEditForm.ShowDialog(); 

    //After it has been closed the program will continue to execute this function(if it has not been ended yet) 
    RefreshData(); 
    //Since this function is running from your main form, the function RefreshData() will be executed on your main form aswell 
} 

根本不需要检查一些对话结果。

2

如果打开编辑表单作为一个模态窗口,ShowDialog的()调用阻塞,所以如果你把refreshData通话后,该编辑表单关闭后它将执行:

var editForm = new EditForm(...); 
var result = editForm.ShowDialog(); 
if (result == DialogResult.OK) 
{ 
    refreshData(); 
} 
0

你当窗体关闭

Form MyEditForm; 

private void cell1_DoubleClick(object sender, System.EventArgs e) 
{ 
    if (MyEditForm==null) 
    { 
     MyEditForm=new MyEditForm(); 
     MyEditForm.FormClosing += refreshData; 
    } 
    MyEditForm.ShowDialog(); 
} 

private void refreshData(object sender, EventArgs e) 
{ 
    var myDataObj=MyEditForm.getData(); 
} 
1

可以访问这些数据,我认为这会工作:

添加型DatagridviewForm的属性DatagridviewForm(你有可能是一个其他的名字/典型值e)到另一个表单。在你打电话anotherForm.ShowDialog的部分,添加以下代码:

anotherForm = new AnotherForm(); 
anotherForm.DatagridviewForm = this; 
anotherForm.ShowDialog(); 
anotherForm.Dispose(); 

在AnotherForm,更新的密切处理器或刷新数据:

private void AnotherForm_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    DatagridviewForm.refreshData(); 
} 
相关问题