事件委托
1、定义事件委托必须在类的外面定义;
2、写事件关联(挂接),事件关联之前先写一个查询QueryStuInfo()【也就是事件的响应】
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using DAL; namespace StudentManagerPro.Students { public partial class StudentManage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //写事件关联,事件关联之前先写一个查询QueryStuInfo()【也就是事件的响应】 //【5】将当前页面所用的用户控件事件和事件的响应方法关联 this.StuQueryControl.StuQueryEvent += new UserControls.BindDataDelegate(this.QueryStuInfo); this.ltaMsg.Text = ""; } //【4】编写响应用户的自定义事件(在这里绑定具体的查询结果) protected void QueryStuInfo() { //[4.1]在下面语句之前要把用户控件拖到页面中去 this.rpList.DataSource = new StudentService().GetStudentByClass(this.StuQueryControl.ClassName); //this.StuQueryControl .ClassName就是封装的属性 this.rpList.DataBind(); } //protected void btnQuery_Click(object sender, EventArgs e) //{ // //this.dlStuInfo.DataSource = new StudentService().GetStudentByClass(this.ddlClass.SelectedItem.Text.Trim()); // //this.dlStuInfo.DataBind(); // //this.rpList.DataSource = new StudentService().GetStudentByClass(this.ddlClass.SelectedItem.Text.Trim()); // //this.rpList.DataBind(); //} #region 删除学员 protected void btnDel_Click(object sender, EventArgs e) { //【1】获取要删除的学号 string studentId = ((LinkButton)sender).CommandArgument; try { //【2】执行删除 int result = new StudentService().DeleteStudentById(studentId); if (result == 1) { //【3】同步从服务器上删除图片 File.Delete(Server.MapPath("~/Images/Student/" + studentId + ".jpg")); //【4】同步刷新(以后使用jQuery同步从前端删除) QueryStuInfo(); } } catch (Exception ex) { this.ltaMsg.Text = "<script>alert('" + ex.Message + "')</script>"; } } #endregion } }
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using DAL; using Models; namespace StudentManagerPro.UserControls { public partial class StuQueryControl : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.ddlClass.DataSource = new StudentClassService().GetAllClass(); this.ddlClass.DataTextField = "ClassName"; this.ddlClass.DataValueField = "ClassId"; this.ddlClass.DataBind(); } } //根据班级查询(有可能查询学员信息,也有可能查询成绩信息)(思路:把当前要完成的任务发布为一个事件,让使用者具体完成, //在这里我们需要做一个事件的接口) protected void btnQuery_Click(object sender, EventArgs e) { //在【3】激发事件之前,要做的事情之二:将当前班级信息保存到属性中 this.ClassName = this.ddlClass.SelectedItem.Text.Trim(); //[4]进入使用的页面,即StudentManage.aspx的后台类; //【3】激发事件(其实就是在关联后,调用用户所定义的事件响应方法) StuQueryEvent(); } //在【3】激发事件之前,要做的事情之一:把班级名称定义成属性(目的:和外界交互的时候,对外提供) public string ClassName { get; set; } //【2】根据委托定义事件(在类的内部针对特定对象定义,当前是给自定义用户控件添加事件) public event BindDataDelegate StuQueryEvent; } //【1】定义事件委托(在类的外面定义) public delegate void BindDataDelegate(); }