winform子窗体关闭,父窗体刷新数据?

sunchangyuan 2010-03-18 09:12:43
在winform中,我创建了一个有datagridview的窗体(姑且就叫主窗体吧)用于显示数据,再ShowDialog了一个用于添加数据的子窗体。如何在子窗体关闭后,父窗体的datagridview再次调用刷新方法刷新数据?
...全文
2301 33 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky42700 2011-11-01
  • 打赏
  • 举报
回复
越看越糊涂。
nali29 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sunchangyuan 的回复:]

我显示数据的方法就是绑定datagridview的DataSource,我想在子窗体的closed事件调用刷新方法不知道是否行得通?
[/Quote]

简单解
andyleec 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 andyleec 的回复:]

建一个接口 比如 iMainForm
接口内声明个方法 比如 Refresh()
主窗体 实现这个接口
主窗体打开子窗体时这样写
子窗体.Owner = this;
子窗体.ShowDialog();
---------------------------------
子窗体内你想啥时候刷新都行
(this.Owner as iMainForm).Refresh();
----……
[/Quote]

楼主,如果你在多处都用到子窗体和父窗体互动,强烈推荐我这个思路,通用,而且体现出了面向对象思想,代码美观
diegoyu 2010-03-18
  • 打赏
  • 举报
回复
建议LZ写个刷新数据的方法,重新绑定数据源
xuzysun 2010-03-18
  • 打赏
  • 举报
回复
通过子窗口的DialogResult来判定,是否需要重新绑定datagridview的DataSource
南哥1207 2010-03-18
  • 打赏
  • 举报
回复
楼上都是答案,不说了
nangangshi 2010-03-18
  • 打赏
  • 举报
回复
用ShowDialog
cecilia2006 2010-03-18
  • 打赏
  • 举报
回复
1 用DialogResult 返回 父窗体处理
2 写个事件 closing时触发父窗体数据刷新
mjay0210 2010-03-18
  • 打赏
  • 举报
回复
如果 你的子窗体 是 ShowDialog()的 直接在其下面写就成了

如果不是 就将其引用编程类引用。然后在一个timer 里监控其状态,如果是Close
就重新绑定

还有第三种方法

FormSon f.Show(this);

在子窗体的关闭函数里这样写:
FormFather ff=f.Owner as Form;
if(ff!=null)
有了这个FF 所有公有成员你想干啥 干啥
sunchangyuan 2010-03-18
  • 打赏
  • 举报
回复
添加成功
this.DialogResult = DialogResult.OK;
会刷新。
但是
修改成功
this.DialogResult = DialogResult.OK;
却不会刷新了!
测试菜鸟 2010-03-18
  • 打赏
  • 举报
回复
Mark 学习
sunchangyuan 2010-03-18
  • 打赏
  • 举报
回复
我用dialogresult方法可以,但是直接添加的数据保存成功后会刷新,但是修改后再保存却不会刷新!不知为甚?
ronaltn 2010-03-18
  • 打赏
  • 举报
回复
Paint事件
Urselect 2010-03-18
  • 打赏
  • 举报
回复
其实你可以在主窗体上直接拖放一个刷新的控件。然后再一次的datagridview的DataSource

当然这样也行的
if(form.ShowDialog()==DialogResult.Ok)
{
//绑定DataGridView代码
}
andyleec 2010-03-18
  • 打赏
  • 举报
回复
建一个接口 比如 iMainForm
接口内声明个方法 比如 Refresh()
主窗体 实现这个接口
主窗体打开子窗体时这样写
子窗体.Owner = this;
子窗体.ShowDialog();
---------------------------------
子窗体内你想啥时候刷新都行
(this.Owner as iMainForm).Refresh();
---------------------------------
以上方法非常泛用
zw880322 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sunchangyuan 的回复:]
我显示数据的方法就是绑定datagridview的DataSource,我想在子窗体的closed事件调用刷新方法不知道是否行得通?
[/Quote]
这个是可以的。
不过先得在你的父窗体有一个public方法来重载datasource,然后用字窗体的this.Parent.方法名()
leafsoar 2010-03-18
  • 打赏
  • 举报
回复
在构造子窗体的时候给子窗体传一个本窗体的引用,这样子窗体就随便怎么操作父窗体了
showlie 2010-03-18
  • 打赏
  • 举报
回复
in MainForm:
if(form1.ShowDialog()==DialogResult.OK)
{
重新绑定DataGridView;
}

in Form1:
在新增按钮添加完数据后,设置窗体的DialogResult为OK
zhxingway 2010-03-18
  • 打赏
  • 举报
回复
当然窗体间传值和更改控件的方法有好多,
楼主可参考http://blog.csdn.net/deanlee1982/archive/2007/08/07/1729548.aspx
zhxingway 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 foxdave 的回复:]
引用 3 楼 sunchangyuan 的回复:
我显示数据的方法就是绑定datagridview的DataSource,我想在子窗体的closed事件调用刷新方法不知道是否行得通?

用DialogResult吧 你那种想法需要把父窗体作为对象传进去
或者写委托吧
[/Quote]

主窗体:

if(form.ShowDialog()==DialogResult.Ok)
{
//绑定DataGridView代码
}


或者在主窗体建一个Public static的方法用于更新DataGridView的数据,然后在子窗体关闭时通过调用Form1.BindDataGridView这个方法来更新数据,


加载更多回复(12)
资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 在C# WinForm开发中,窗体有时需要操作或更新窗体的状态,例如刷新窗体内容或修改窗体控件的值。以下是两种实现方式的详细说明。 方法一:使用委托 通过定义一个自定义委托SetVisiableHandler,将窗体的方法传递到窗体中,窗体可以在需要时调用该方法来改变窗体的控件状态。具体步骤如下: 在窗体Form2中定义委托类型SetVisiableHandler以及相关处理方法。 当打开窗体Form3时,将SetVisiable方法作为参数传递给窗体窗体Form3接收并存储该委托,在按钮点击事件btnVisible_Click中调用它。 以下是代码示例: 方法二:使用公共变量 通过在窗体窗体之间共享公共变量来实现通信。具体步骤如下: 在窗体Form4中定义一个公共属性StrLabel1,用于存储需要传递的值。 窗体Form5通过访问这个公共变量来获取或设置窗体的值。 窗体在操作完成后,通过修改公共变量来更新窗体的状态。 以下是代码示例: 这两种方法都可以实现窗体窗体的控制,但需要注意窗体之间的关系,例如通过Owner属性或手动传递引用。频繁的跨窗体交互可能会增加复杂性,因此在设计时应考虑清晰的结构和通信方式,避免不必要的耦合。总的来说,在C# WinForm开发中,窗体窗体的交互可以通过委托、公共变量等多种方式实现。选择哪种方法取决于具体需求和项目结构,实际应用中应注重代码的可读性和维护性。

111,107

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧