[请教]:一个困扰了很久的问题...用户控件...

i169net1 2006-06-09 03:40:07

我的页面是这样的:
两个Panel容器,Panel1放DataGrid,Panel2放编辑/新增数据用的用户控件~

页面初始化时,显示Panel1,隐藏Panel2(写在!(Page.IsPostBack)内)...
点页面上的新增或编辑数据链接:隐藏Panel1,显示Panel2...

新增或编辑完毕后,点用户控件内的‘提交’按钮,在控件.cs代码中完成提交的过程,然后强制刷新页面:Response.AddHeader("refresh","0"),这样就又初始化页面了:显示Panel1,隐藏Panel2,并重新绑定datagrid,呈现出修改后的内容......

页面刷来刷去实在是很难看~
现在,我想不用强制刷新页面,如何达到同样的效果~?

注意:页面初始化代码是写在!(Page.IsPostBack)内的,因为用户控件中二级关联的下拉菜单,且不是js实现的...它会导致刷新页面回送...


--------------------------------------------------------------------------
还有一个类似的问题:
也是在这个页面中,还有一个获得查询条件的用户控件,是一些下拉菜单和文本框,用户在这里合成提交查询数据库的条件,‘提交’后,页面的datagrid马上按此条件显示数据...
我现在也是用强制刷新实现的~~~~

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

有更好的办法吗???


...全文
203 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
i169net1 2006-06-10
  • 打赏
  • 举报
回复
如果WebUserControl1还有第二个按钮Button2,也进行事件委托...
代码应该怎么组织啊?


用户控件的后台部分------------------------------------------------------
private static readonly object EventClick1;
protected System.Web.UI.WebControls.Button Button1;
private static readonly object EventClick2;
protected System.Web.UI.WebControls.Button Button2;

public event EventHandler Click1 //按钮1的事件
{
add
{
base.Events.AddHandler(WebUserControl1.EventClick1,value);
}
remove
{
base.Events.RemoveHandler(WebUserControl1.EventClick1,value);
}
}

public event EventHandler Click2 //按钮2的事件
{
add
{
base.Events.AddHandler(WebUserControl1.EventClick2,value);
}
remove
{
base.Events.RemoveHandler(WebUserControl1.EventClick2,value);
}
}

protected virtual void OnClick(EventArgs e) //这里怎么改啊?似乎删掉不用也可以的?
{
}

private void Button2_Click() 类似 private void Button1_Click()添加代码...


aspx.cs :------------------------------------------------------------------------
private void Page_Load(object sender, System.EventArgs e)
{
WebUserControl1 wb = this.FindControl("WebUserControl11") as WebUserControl1;
if(wb!=null)
{
wb.Click1+=new EventHandler(wb_Click1); //这样写对吗?
wb.Click2+=new EventHandler(wb_Click2);
}
}
i169net1 2006-06-10
  • 打赏
  • 举报
回复
测试成功!
只是有一个小报警:
从未对字段“WebUserControl1.EventClick”赋值,字段将一直保持其默认值 null...
i169net1 2006-06-10
  • 打赏
  • 举报
回复
非常感谢!

小弟愚笨,不知道这个虚拟函数用来作什么?
protected virtual void OnClick(EventArgs e) {}
greennetboy 2006-06-09
  • 打赏
  • 举报
回复
用户控件的页面部分
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="WebUserControl1.ascx.cs" Inherits="test.WebUserControl1" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<FONT face="宋体">
<asp:Button id="Button1" Text="Button" runat="server"></asp:Button></FONT>

用户控件的后台部分
namespace test
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.ComponentModel;

/// <summary>
/// Summary description for WebUserControl1.
/// </summary>

public class WebUserControl1 : System.Web.UI.UserControl
{


private static readonly object EventClick;
protected System.Web.UI.WebControls.Button Button1;



private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}


public event EventHandler Click
{
add
{
base.Events.AddHandler(WebUserControl1.EventClick,value);
}
remove
{
base.Events.RemoveHandler(WebUserControl1.EventClick,value);
}
}

protected virtual void OnClick(EventArgs e)
{

}




#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
//
//...提交功能
//
EventHandler handler1 = (EventHandler) base.Events[EventClick];
if(handler1!=null)
{
handler1(this,e);
}
}
}
}



调用页面的页面部分
<%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %>
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="test.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Panel id="Panel1" style="Z-INDEX: 101; LEFT: 424px; POSITION: absolute; TOP: 184px" runat="server"
Visible="True">haahhhakshdgkjdsahgjksdahgjksdah</asp:Panel>
<asp:Panel id="Panel2" Visible="False" style="Z-INDEX: 102; LEFT: 416px; POSITION: absolute; TOP: 120px" runat="server">
<uc1:WebUserControl1 id="WebUserControl11" runat="server"></uc1:WebUserControl1>
</asp:Panel>
<asp:Button id="Button1" style="Z-INDEX: 103; LEFT: 440px; POSITION: absolute; TOP: 264px" runat="server"
Text="Button"></asp:Button>
</form>
</body>
</HTML>

后台部分
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace test
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Panel Panel2;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Panel Panel1;

private void Page_Load(object sender, System.EventArgs e)
{
WebUserControl1 wb = this.FindControl("WebUserControl11") as WebUserControl1;
if(wb!=null)
{
wb.Click+=new EventHandler(wb_Click);
}
}



#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void wb_Click(object sender, EventArgs e)
{
Panel1.Visible=true;
Panel2.Visible = false;
}

private void Button1_Click(object sender, System.EventArgs e)
{
Panel1.Visible=false;
Panel2.Visible = true;
}
}
}
i169net1 2006-06-09
  • 打赏
  • 举报
回复
真的没有办法???

晕倒....

truecoffeefox 2006-06-09
  • 打赏
  • 举报
回复
控制刷新只能用ajax

.net2没有datagrid
但是也一样支持datagrid
简单的可以在2003种复制datagrid在2005中粘贴就可以了
lazyfish 2006-06-09
  • 打赏
  • 举报
回复
没有办法,使用AJAX.
i169net1 2006-06-09
  • 打赏
  • 举报
回复
但是在用户控件.CS中是没有datagrid的啊....

另外,此控件可能在其他场合使用~如果加特定代码,就不通用了啊...
eflea 2006-06-09
  • 打赏
  • 举报
回复
添加以后绑定datagrid就行了
要不刷新的 建议用.net 2.0和atlas

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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