这是我设置的结构:
<UserControl1>
<ListView>
<UserControl2 />
<UserControl2 />
<UserControl2 />
<UserControl2 />
</ListView>
</UserControl2>
当用户点击UserControl2上的“编辑”时,我想在UserControl1上处理该事件。所以我在UserControl2上创建了一个事件,在ListView DataBind上的UserControl1上添加了一个处理程序,并在单击“编辑”时引发了UserControl2事件。
但是当用户点击“编辑”时,整个事情会回发,并且处理程序在UserControl1上丢失。问题是,我无法在每次回发时重新绑定ListView,因为重新添加处理程序是一项非常繁重,耗时的操作。
那么如何让UserControl1看到UserControl2的事件呢?
我尝试过的事情:
感谢您的帮助。
答案 0 :(得分:2)
我有一段时间没有做过网络表格 - 但我对此很感兴趣。
这三个文件将演示如何使用用户控件订阅事件。
单击UserControl1中的任何事件将触发事件 - 在这种情况下,只发送UserControl1中按钮的文本。
VB中的代码应该非常相似。
的UserControl1
<%@ Control Language="C#" AutoEventWireup="true" %>
<script runat="server">
public delegate void SillyHandler(object sender, string text);
public event SillyHandler SomethingHappened;
public string Name { get; set; }
protected void Button1_Click(object sender, EventArgs e)
{
if (SomethingHappened != null)
SomethingHappened(this.Button1, this.Button1.Text);
}
</script>
<asp:Button ID="Button1" runat="server" Text="<%#this.Name %>" onclick="Button1_Click" />
UserControl2
<%@ Control Language="C#" AutoEventWireup="true" %>
<%@ Register src="UserControl1.ascx" tagname="UserControl1" tagprefix="uc1" %>
<script runat="server">
public List<string> DataSource { get; set; }
protected void SomethingHappened(object sender, string txt)
{
MyLabel.Text = txt;
}
</script>
<asp:ListView runat="server" ID="ListView1" DataSource="<%#DataSource %>">
<ItemTemplate>
<uc1:UserControl1 ID="UserControl11" runat="server" OnSomethingHappened="SomethingHappened" Name="<%#Container.DataItem %>"/>
</ItemTemplate>
</asp:ListView>
<asp:Label runat="server" ID="MyLabel" />
Default.aspx的
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Register src="UserControl2.ascx" tagname="UserControl2" tagprefix="uc1" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.UserControl21.DataSource = new List<string> { "A", "B", "C" };
this.UserControl21.DataBind();
}
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<uc1:UserControl2 ID="UserControl21" runat="server" />
</div>
</form>
</body>
</html>