我有两个用户控件,放在一个页面上 index.aspx 。
现在想在一个用户控件的button的click事件中调用另外一个用户控件的Gridview的bind方法。
不知道如何写。另外,我的两个用户控件分别在两个updatepanel中,希望在第一个用户控件中调用了第二个用户控件中的bindGrid()方法后能刷新第二个用户控件!!

解决方案 »

  1.   

    WebUserControl1.ascx<%@ Control Language="C#" ClassName="WebUserControl1" %><script runat="server">
    public void Exec()
    {
    this.Label1.Text = "123";
    }
    </script>
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    WebUserControl2.ascx
    <%@ Control Language="C#" ClassName="WebUserControl2" %>
    <%@ Reference Control="~/WebUserControl1.ascx" %>
    <script runat="server"> protected void Button1_Click(object sender, EventArgs e)
    {
    var ctl = this.Page.FindControl("WebUserControl1") as WebUserControl1;
    ctl.Exec();
    }
    </script>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />default.aspx<%@ Page Language="C#" %><%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %>
    <%@ Register src="WebUserControl2.ascx" tagname="WebUserControl2" tagprefix="uc2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"></script><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
         <uc1:WebUserControl1 ID="WebUserControl1" runat="server" />
    <uc2:WebUserControl2 ID="WebUserControl2" runat="server" />
        
        </div>
        </form>
    </body>
    </html>
      

  2.   

    如果是 web 应用程序,不是 web网站 工程就不需要<%@ Reference Control="~/WebUserControl1.ascx" %>
    这样了好像自己试验吧不用 FindControl ,自己反射
    或循环取子级别判断是否是需要的 用户控件也可我个人不建议这么做,耦合性太狠了
      

  3.   


    var ctl = this.Page.FindControl("WebUserControl1") as WebUserControl1;
    这句话提示 WebUserControl1 找不到类型名或命名空间(是否缺少using指令或程序集引用)
    怎么回事啊 ??
      

  4.   

    我跟你说一点软件设计基本思路(做项目的思路),只有你有把握很好地“分开”才能很高效地协同开发。对于不同的用户控件,它是一个独立的可外包任务,它是独立地、清楚地定义接口、协议、测试方法、底层机制、性能要求。而两个控件就是两个独立的开发任务。因此我们不应该想当然地去纠结一个控件去访问另一个,而是应该在接口中设计协同的机制。具体地说,一个控件发生了一个事件,就是用控件对外接口的public event通知客户。同时,一个控件要被客户执行一个任务(或者设置一个属性),也是在接口中定义。因此作为负责产品设计的人员(而不一定是编程人员),他在第一个控件的接口上定一个“开始查询”的事件(而不是用什么“button的click事件”这种,因为根本不需要纠结于到底用什么控件实现),然后第二个控件的接口上定义一个“查询(组合查询条件)”方法,这就可以了。最后,拼凑页面的人把两个用户控件用鼠标拖到页面上,写一行代码让一个控件对象的事件处理时调用另一个控件对象的方法,这就可以了。
    最后,第二个控件中当执行“查询”方法时,执行 MyUpdatePanel.Update() 这类方法。什么界面改变了就执行它对应的 UpdatePanel的Update方法,跟页面上没有没有更多的控件没有关系。
      

  5.   

    FindControl其实机制挺复杂,但是轻易使用它其实会让你变傻,让原本一个软件设计师退化成代码民工。
      

  6.   

    楼主没看见吗?
    <%@ Reference Control="~/WebUserControl1.ascx" %>虽然可以这样,不过我还是不建议你这么开放程序