我定义了2个用户控件:uc1, uc2  
uc1中需要调用uc2里的方法,uc2里的方法已定义为public,如何调用呢? 
请大家帮忙!! 

解决方案 »

  1.   

    如果这个方法实际上跟那个控件没什么关系,就把这个方法分离出来,另用一个类来封装,这样可以在任意类里重用。否则的话,建议用接口的方法,interface SomeInt
    {
      int SomeMethod();
    }class YourUserControl2 : UserControl, SomeInt
    {}然后让你的页面把uc2以接口的方式传给你的uc1
      

  2.   

    看看这个是否有帮助http://topic.csdn.net/u/20070308/16/cdc51bd1-b630-4709-99ce-27dc01979940.html
      

  3.   

    uc1 里是一些checkbox控件与Button控件 (后台是checkbox数据绑定和Button_Click事件), uc2里是一个GridView控件(含模板)(后台是GridView数据绑定和对模板的一些操作)。
    想在页面中加载uc1和uc2,在uc1中的checkbox中选定值后,点击Button,在button_Click事件中调用uc2的GridView数据绑定。不知道这样是不是思路有问题?
      

  4.   

    大概可以这么做(好处是控件一与控件二几乎是独立的,可以在其他地方重用):public class YourUserControl2: UserControl
    {
      public void BindData(int abc)
      {
    //绑定你的GridView,如果需要输入,就从参数输入
      }
    }
    public class YourUserControl1: UserControl
    {
     
      public event EventHandler DisplayData;  public int SomeProperty
      {
    get
    {

    }
      }  public void Button_Click(Object sender, EventArgs e)
      {
    if (DisplayData != null)
    DisplayData(this,EventArgs.Empty);
      }
    }public class YourPage : Page
    {
      
       YourUserControl1 uc1;
       YourUserControl2 uc2;  //.....
      void Page_Load(Object sender, EventArgs e)
      {
         uc2.DisplayData += BindDisplay;
      }   public void BindDisplay(Object sender, EventArgs e)
       {
    uc2.BindData(uc1.SomeProperty);
       }
    }
      

  5.   

    思归大侠说的正是我想要得。不过还有个地方不明白,Button Click事件中的DisplayData方法不太懂,而且我需要在Button_Click后根据选择的值生成sql语句,在哪里写生成sql得语句呢?写在Button_Click方法中吗?如何传递给BindData呢?
      

  6.   

    DisplayData是事件,当你按钮被点击时,它告诉观察这个事件的对象说,你需要显示数据了。在这里是页面对象观察这个事件,在触发时,它命令uc2做数据绑定,同时传进去绑定数据所需的参数
      

  7.   

    按照"思归"的思路做了。在uc2.DisplayData += BindDisplay;行有错误提示。
    开始是提示 uc2中没有定义DisplayData. 我在public class YourUserControl2: UserControl 中加入了声明public event EventHandler DisplayData; 
    错误提示变成system.NullReferenceException, 好像是未将对象引用设置到对象的实例。不知问题在何处。请大侠再帮忙看看!
      

  8.   

    思归大侠:
    我在加载了2个控件的页面里,比如:
    <% Register Src="..." ...>
    <% Register Src="..." ...>
    <uc1:xxx ID="viewCB" runat="server" />
    <uc2:xxx ID="viewGV" runat="server">
    我用ID值 viewCB 和  viewGV 替换你上面代码里的uc1和uc2,错误提示没了,可是 public void BindDisplay(Object sender, EventArgs e) 里的东西不运行。我设了停顿点,在uc1中,每点击按钮一次,运行一次 Page_Load 中的 uc2.DisplayData += BindDisplay; 但BindDisplay 中的 uc2.BindData(uc1.SomeProperty);不运行就直接结束了,也就是说无法完成绑定了。请教怎么解决呢?
      

  9.   

    终于搞定了,uc2.DisplayData += BindDisplay;这句中uc2应该改为uc1, 大侠笔误了。
    感谢思归的耐心详细讲解,感动!!
    结贴,给分!!!