【征服刷新】 关于子窗体刷新父窗体的问题(不是一般的父子窗体)!

mzjmicrosoft 2009-10-29 03:49:59
简单描述下问题(练习下表达能力):

一、首先是A窗体(父窗体):

<ItemTemplate>
<asp:LinkButton ID="LinkButton5" runat="server" ForeColor="#000066">查看</asp:LinkButton>
<asp:Label ID="Label2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "F_cltID")%>'
Visible="False" Width="0px"></asp:Label>
</ItemTemplate>


if (e.Row.RowType == DataControlRowType.DataRow)
{
//查看
LinkButton l = (LinkButton)e.Row.FindControl("LinkButton5");
Label b = (Label)e.Row.FindControl("Label2");

int Temp1 =Convert.ToInt32( b.Text.ToString());
l.Attributes.Add("onclick", "window.showModalDialog(B窗体.aspx?id=" +Temp1 + "','window','dialogWidth:880px;DialogHeight=660px;status:no;help:no;resizable:yes;');document.execCommand('Refresh');");
}


二、第二个B窗体(这个窗体貌似可以被叫做:子窗体)

<asp:Button ID="Button7" runat="server" Text="弹出C窗体" />
<!--PS:这个Button的作用是增加一条新记录到B窗体-->

注意:我这里用的是window.showModalDialog,据说给后面加上document.execCommand('Refresh')便可刷新B窗体,可能是我人品问题....也可能是这根本就不是子窗体刷新父窗体

this.Button7.Attributes.Add("onclick", "window.showModalDialog('C窗体.aspx?id=" + Server.UrlEncode(Session["XXXX"].ToString()+ "','window','dialogWidth:600px;DialogHeight=400px;status:no;help:no;resizable:yes;');document.execCommand('Refresh');");


三、最后一个C窗体(罪魁祸首...)


<asp:Button ID="Button1" runat="server" Text="确 定" onclick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="关 闭" onclick="Button2_Click" />

---------------------------------------------------------------------------------------------------------------

protected void Button1_Click(object sender, EventArgs e)
{

//增加新记录
}
protected void Button2_Click(object sender, EventArgs e)
{
//关闭
Response.Write("<script>window.close();</script>");
}


现在问题来了,C窗体点击确定新增一条新记录之后,B窗体没有刷新,请问我这叫子窗体刷新父窗体嘛?如果是,应该怎样刷新?如果根本实现不了,我会很高兴的哦....

补充点废话:B窗体的有个GridView,在C窗体新增一条记录后关闭C窗体返回B窗体,GridView刷新重新绑定(说这么多废话....其实也就是刷新下B窗体就OK..)


...全文
1283 点赞 收藏 37
写回复
37 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hhh871030 2010-08-10
这个东东我不知道怎么解决,但是我知道有个东东叫ModalPopupExtender,有了这个你就不用去想什么父子窗口刷新了。。建议去看看。。挺不错的一个小东西
http://msdn.microsoft.com/zh-cn/magazine/cc164247.aspx
回复
mzjmicrosoft 2009-10-30
[Quote=引用 32 楼 saishangpeiqian 的回复:]
8楼的可以试试
[/Quote]

试过 无效
回复
dengxiao1981 2009-10-30
回复
saishangpeiqian 2009-10-30
8楼的可以试试
回复
mzjmicrosoft 2009-10-30
早上起来在

问题:A窗体打开B窗体(这个B窗体算父窗体嘛?),然后B窗体打开C窗体,在C窗体里新增一条记录,然后刷新B窗体,就这么简单...能实现嘛?

回复
24K純帥 2009-10-30
up..
回复
mzjmicrosoft 2009-10-30
[Quote=引用楼主 mzjmicrosoft 的回复:]
简单描述下问题(练习下表达能力):

一、首先是A窗体(父窗体):
HTML code<ItemTemplate><asp:LinkButtonID="LinkButton5" runat="server" ForeColor="#000066">查看</asp:LinkButton><asp:LabelID="Label2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"F_cltID")%>'
Visible="False" Width="0px"></asp:Label></ItemTemplate>
C# codeif (e.Row.RowType== DataControlRowType.DataRow)
{//查看 LinkButton l= (LinkButton)e.Row.FindControl("LinkButton5");
Label b= (Label)e.Row.FindControl("Label2");int Temp1=Convert.ToInt32( b.Text.ToString());
l.Attributes.Add("onclick","window.showModalDialog(B窗体.aspx?id="+Temp1+"','window','dialogWidth:880px;DialogHeight=660px;status:no;help:no;resizable:yes;');document.execCommand('Refresh');");
}

二、第二个B窗体(这个窗体貌似可以被叫做:子窗体)
HTML code<asp:ButtonID="Button7" runat="server" Text="弹出C窗体"/><!--PS:这个Button的作用是增加一条新记录到B窗体-->
注意:我这里用的是window.showModalDialog,据说给后面加上document.execCommand('Refresh')便可刷新B窗体,可能是我人品问题....也可能是这根本就不是子窗体刷新父窗体
C# codethis.Button7.Attributes.Add("onclick","window.showModalDialog('C窗体.aspx?id="+ Server.UrlEncode(Session["XXXX"].ToString()+"','window','dialogWidth:600px;DialogHeight=400px;status:no;help:no;resizable:yes;');document.execCommand('Refresh');");

三、最后一个C窗体(罪魁祸首...)

HTML code<asp:ButtonID="Button1" runat="server" Text="确 定" onclick="Button1_Click"/><asp:ButtonID="Button2" runat="server" Text="关 闭" onclick="Button2_Click"/>
---------------------------------------------------------------------------------------------------------------
C# codeprotectedvoid Button1_Click(object sender, EventArgs e)
{//增加新记录 }protectedvoid Button2_Click(object sender, EventArgs e)
{//关闭 Response.Write("<script>window.close();</script>");
}

现在问题来了,C窗体点击确定新增一条新记录之后,B窗体没有刷新,请问我这叫子窗体刷新父窗体嘛?如果是,应该怎样刷新?如果根本实现不了,我会很高兴的哦....

补充点废话:B窗体的有个GridView,在C窗体新增一条记录后关闭C窗体返回B窗体,GridView刷新重新绑定(说这么多废话....其实也就是刷新下B窗体就OK..)



[/Quote]

问题解决:其实很简单

B窗体改动如下:

PS:因为B窗体要传参数,所以在后台先定义一个公共变量
public static int QQ;//公共变量

然后在Page_Load事件中:

QQ = Convert.ToInt32(Session["xxx"].ToString());
this.Button7.Attributes["onclick"] = "javascript:Add();";


前台JavaScript脚本:

<script type="text/javascript">
function Add1()
{
window.showModalDialog("C窗体.aspx?AnnID=<%=QQ%>","window","dialogWidth:880px;DialogHeight=500px;status:no;help:no;resizable:yes;");
window.location='#';
}
</script>

最后很重要的一点,在Button7的单击事件中重新绑定数据源:

protected void Button7_Click(object sender, EventArgs e)
{
DataBindXXX();
}


结果:俺胜利的【征服】了刷新...


回复
zhouzangood 2009-10-29
[Quote=引用 2 楼 mzjmicrosoft 的回复:]
额....

此贴莫沉...


来人顶顶啊


[/Quote]

友情幫頂
回复
happy664618843 2009-10-29
window.opener.location.reload();或 window.parent.loaction.reload() refresh
关闭窗体:window.opener=null;window.close();
回复
lsd123 2009-10-29
.
回复
zhanlang9075 2009-10-29
抢占SF有新教 —— “毁灭SF” 
回复
bl_song 2009-10-29

你可能是 两个窗体之间的传值吧

我是A窗体首先打开 B窗体(这个算父窗体嘛)?
回复
mzjmicrosoft 2009-10-29
[Quote=引用 23 楼 ivws_19 的回复:]
那不清楚了,可能浏览器原因吧,我试过可以的
[/Quote]


你可能是 两个窗体之间的传值吧

我是A窗体首先打开 B窗体(这个算父窗体嘛)?

回复
mzjmicrosoft 2009-10-29
都快成 子窗体与父窗体 专家了...

以前的问题:

子窗体向父窗体传值:http://topic.csdn.net/u/20091012/16/9a082f7b-97a4-4475-9d7e-b241fed6df8a.html

父窗体向子窗体传值http://topic.csdn.net/u/20091019/17/c1e638db-3c07-4053-a498-6e6804801102.html

三个窗体间的传值(父窗体、子窗体、孙子窗体)
http://topic.csdn.net/u/20091020/16/b3e78af2-add8-422f-a2ae-67dd58c33a84.html
回复
ivws_19 2009-10-29
那不清楚了,可能浏览器原因吧,我试过可以的
回复
mzjmicrosoft 2009-10-29
[Quote=引用 21 楼 ivws_19 的回复:]
B中的window.showModalDialog('C窗体.aspx?id=" + Server.UrlEncode(Session["XXXX"].ToString()+ "','window','dialogWidth:600px;DialogHeight=400px;status:no;help:no;resizable:yes;');document.execCommand('Refresh');");第二个参数window,单隐号去掉,再用window.dialogArguments.location.reload()试下


[/Quote]


this.Button7.Attributes.Add("onclick", "window.showModalDialog('AddContractAnnal.aspx?AnnID=" + Server.UrlEncode(Session["xxx"].ToString()) + "',window,'dialogWidth:600px;DialogHeight=400px;status:no;help:no;resizable:yes;');window.location='#';");

去掉了


//关闭
protected void Button2_Click(object sender, EventArgs e)
{
Response.Write("<script>window.dialogArguments.location.reload();</script>");
Response.Write("<script>window.close();</script>");
}


不报错了,但B窗体还是没刷新.....


看来这个方法 还是不行.
回复
ivws_19 2009-10-29
B中的window.showModalDialog('C窗体.aspx?id=" + Server.UrlEncode(Session["XXXX"].ToString()+ "','window','dialogWidth:600px;DialogHeight=400px;status:no;help:no;resizable:yes;');document.execCommand('Refresh');");第二个参数window,单隐号去掉,再用window.dialogArguments.location.reload()试下

回复
mzjmicrosoft 2009-10-29
[Quote=引用 18 楼 ivws_19 的回复:]
关闭C的时候,window.dialogArguments.location.reload();
[/Quote]

报错....dialogArguments不是对象
回复
mzjmicrosoft 2009-10-29
期待高人...
回复
ivws_19 2009-10-29
关闭C的时候,window.dialogArguments.location.reload();
回复
加载更多回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2009-10-29 03:49
社区公告
暂无公告