事件委托

 

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();
}

 

posted @ 2017-12-21 19:44  爱踢两键  阅读(144)  评论(0编辑  收藏  举报