在不同的控件上调用函数

时间:2012-07-22 21:24:47

标签: c# asp.net user-controls

我有一个具有一些搜索功能的用户控件,然后我还有一个包含网格的控件。在具有网格的控件中,我具有检索一些项目的所有功能,我需要从搜索控件填充报告。

我的问题是,我已经阅读了这个但不完全确定如何使其工作,我读到我需要在控件A中注册一个事件处理程序,它在控件B中调用该函数。它是如何工作的?

在控件B中说我需要调用一个函数GetAllItemsByRegistrantID(int id).如何从控件A调用此函数?

我真的很感激任何帮助或指导。

此致

2 个答案:

答案 0 :(得分:3)

Here is an example if you had to do it using events.

在您的第一个用户控件(搜索控件)上定义自定义事件。

public partial class UserControl1 : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public event EventHandler<MyCustomeEventArgs> MyCustomClickEvent;

    protected virtual void OnMyCustomClickEvent(MyCustomeEventArgs e)
    {
        if (MyCustomClickEvent != null)
            MyCustomClickEvent(this, e);

    }

    public void button1_Click(object sender, EventArgs e)
    {
        OnMyCustomClickEvent(new MyCustomeEventArgs(5));
    }

}
public class MyCustomeEventArgs : EventArgs
{
    public MyCustomeEventArgs(int searchID)
    {
        SearchID = searchID;
    }
    public int SearchID { get; set; }

}

在使用网格的用户控件上,定义处理程序。

public void HandleCustomEvent(object sender, MyCustomeEventArgs e)
{
    GetAllItemsByRegistrantID(e.SearchID);
}

public void GetAllItemsByRegistrantID(int id)
{
    Label1.Text = id.ToString();
}

在他们俩居住的页面上,将它们连接在一起。

protected void Page_Load(object sender, EventArgs e)
{
    UserControl1Instance.MyCustomClickEvent += UserControl2Instance.HandleCustomEvent;
}

答案 1 :(得分:0)

我肯定会尝试避免这种情况。您应该将这种代码放在一个类中,并在两个控件之间共享它。