2010年12月4日

用委托提取用户控件中的值

用委托提取用户控件中的值

由于用户控件生成,如page_load .总是在调用用户控件的页面之后.在调用该用户控件的页面上要调用用户控件上的新值时,总是慢一拍,(刷新就不会).
用委托可以解决这样的问题.
UserControl.ascx.cs中的处理:
1. 定义public的事件委托,如SelectedChangedEventHandler;
2. 在UserControl类中声明事件,如SelectedChanged;
3. 在UserControl类中定义引发事件的方法,如OnSelectedChanged()方法;
4. 在UserControl类的相关方法中调用引发事件的方法,
如在DropDownList1_SelectedIndexChanged中调用OnSelectedChanged()。
核心代码示意如下:

public class MyUserControl : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.DropDownList DropDownList1;
public delegate void SelectedChangedEventHandler(object sender, EventArgs e);
public event SelectedChangedEventHandler SelectedChanged;
protected void OnSelectedChanged(EventArgs e)
{
if (SelectedChanged!=null)
SelectedChanged(this, e);
}
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
{
this.OnSelectedChanged(e);
}
}
包含UserControl的页面cs文件中的处理:
1. InitializeComponent()中增加事件处理程序,采用FindControl方法找到UserControl;
2. 定义事件处理方法,在该方法中处理UserControl的事件,如UserControl_SelectedChanged()。
核心代码示意如下:
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
MyUserControl uc = this.FindControl("myUserControlID") as MyUserControl;
uc.SelectedChanged+= new SelectedChangedEventHandler(this.UserControl_SelectedChanged);
}
private void UserControl_SelectedChanged(object sender, System.EventArgs e)
{
// UserControl_SelectedChanged event hanlder
}

也可以直接对用户控件查找:
1.先定义ASPX页面上调用的用户控件的id
2.用FindControl方法找到用户控件中的控件id.
如下:
protected UserControl UserControl1;//UserControl1就是用户控件在ASPX页面上的id

((DropDownList)UserControl1.FindControl(" DropDownList1")).SelectedValue;

没有评论:

发表评论