关闭子窗体,父窗体的数据自动刷新
父窗体中用DataGrid显示数据库中的数据。点击了页面上的按钮以后。
弹出一个新的窗体。在新的窗体中对数据进行修改操作,然后点击“关闭”按钮(服务器控件)
这个时候,我需要父窗体的DataGrid中的数据已经刷新显示最新的数据了。
不知道这个问题怎么解决。高手赐教,谢谢。
问题点数:20、回复次数:14Top
1 楼binny0532(苏打水)回复于 2006-03-08 16:14:04 得分 2
在后台也是可以写JS的
可以用js来刷新
window.opener.location.reload();Top
2 楼vividboy(参数1,参数2..)回复于 2006-03-08 16:17:50 得分 0
谢谢,binny0532(苏打水)
需要前面先用 window.opener.location.href = "父窗体地址" 吗?Top
3 楼netpot(netpot)回复于 2006-03-08 16:24:15 得分 2
楼主应该问的是winform中吧?
把datagrid的数据源(dataset或者datatable)做为参数传给子窗体就ok
形如 frmChild frm = new frmChile(dataTable);
当子窗体关闭时候,父窗体会自动更新
如果是自定义实体类,则需要实现 IBindingList and IEditableObject interfaces,
see Windows Forms Data Binding and Objects
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadvnet/html/vbnet02252003.aspTop
4 楼seabluecn()回复于 2006-03-08 16:28:55 得分 1
window.opener.location.reload();这一句就够了Top
5 楼PerfectStar(第一个获得图灵奖的中国籍男子)回复于 2006-03-08 16:29:43 得分 2
function GuanBiHeShuaXin()
{
window.opener.location.href=window.opener.location.href;
self.close();
}Top
6 楼vividboy(参数1,参数2..)回复于 2006-03-08 16:42:41 得分 0
谢谢各位
netpot(netpot),我的是ASP.NET。
seabluecn() ,确实可以实现刷新功能,不过相当于点击了浏览器的“刷新”按钮,所以
会弹出提示。
PerfectStar, "window.opener.loaction.href = window.opener.location.href"具体指什么意思?
Top
7 楼amnoh(会走路的鱼)回复于 2006-03-08 17:22:30 得分 4
如果用户已经点过某些按钮,用"location.reload()"就会出现提示,这是不可避免的,所以,特别是在webform中,最好不要用reload;
可以用window.opener.loaction.href = window.opener.location.href 来刷新,
简单的说,location.href就是地址,"window.opener.loaction.href = window.opener.location.href"就是设置父窗口的地址为父窗口当前的地址,这个操作会导致页面刷新,但也有问题,此时服务器会执行page_load中
if(!Page.IsPostBack)
{
...
}
中的代码,有时这和我们想要的情况不一样.
最好是在父窗口页面中弄一个更新用的function,放一个hiddenInput,
要更新时,调用该function,设置标识值,然后采用"Form1.submit()"的方式来刷新页面,
服务器中在page_load里判断该hiddenInput的值,按情况进行处理.
这种方法最麻烦,不过比较保险
Top
8 楼vividboy(参数1,参数2..)回复于 2006-03-08 19:47:40 得分 0
amnoh(会走路的鱼), 对你想法很感兴趣。
但我对你的方法的实现还不是很理解。
请明示。
比如:
1 具体在什么地方,怎样调用更新 hiddenInput 的function
2 Form1.submit() 是怎样一个方法。
谢谢Top
9 楼canghai827716(滄海)回复于 2006-03-08 20:05:38 得分 1
Response.Write("<script language='javascript'>
window.opener.location.Reload();window.close();</script>");Top
10 楼flysky913()回复于 2006-03-08 20:39:22 得分 2
你弹出的新窗体是用什么弹出的呢?如果是用window.showModalDialog()的话,你可以在window.showModalDialog()之后加上document.forms[0].submit()这一句就可以了,子窗体的代码不要做任何改动;Top
11 楼vividboy(参数1,参数2..)回复于 2006-03-09 08:36:30 得分 0
To flysky913
我是用window.open(URL)来打开新的窗口的。Top
12 楼iuhxq(小灰)回复于 2006-03-09 08:40:01 得分 2
如果你用了自动分页,那window.opener.location.reload();刷新会弹出窗口
所以最好还是自己分页,保证你的列表是GET方式访问的,这样window.opener.location.reload();就是对的了Top
13 楼amnoh(会走路的鱼)回复于 2006-03-09 13:01:08 得分 0
1 具体在什么地方,怎样调用更新 hiddenInput 的function
2 Form1.submit() 是怎样一个方法。
=====================================================
在父窗口放一个hidden Input,写一个JS function,比如叫个refresh,
那么就在关闭子窗体的时候,在子窗体中通过
window.opener.refresh();
调用,在父窗口的refresh中,先将那个hidden Input的值设置好,
然后提交表单,那个Form1.submit()就是提交表单了,当然,你的页面中那个服务器端Form不见得叫Form1,但道理是一样的Top
14 楼jimu8130(火箭的未来在哪里?)回复于 2006-03-09 13:33:15 得分 4
你干脆在父页面挂个按钮(width =0),然后这个按钮的事件代码则是重新查询数据库得到数据和datagrid绑定
看我的
function Goto(strUrl){
str=window.showModalDialog(strUrl,'','dialogheight :260px; dialogwidth :324px; edge: Raised; center: Yes; help: No; resizable: No; status: No; scroll:No;');
//alert(str)
if(str =='0')
{
// alert('操作失败');
return false;
}
else if(str=='1')
{
// alert('操作成功');
// document.all.btnRef.focus();
//alert('focus');
document.all.btnRef.click();
//alert('click');
return false;
}
}Top




