1. 程式人生 > >頁面上呼叫使用者控制元件的事件

頁面上呼叫使用者控制元件的事件

先寫一個使用者控制元件WebUserControl1 在前臺頁面ascx中寫一個選擇使用者的下拉框,一個按鈕和按鈕點選事件。 ascx: 請選擇人員:  

在後臺頁面,宣告一個帶一個引數的全域性委託,這個引數用來儲存下拉框選項的文字,並且在載入時候為下拉框繫結資料庫的資料來源。
SqlHelper sql = new SqlHelper();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = sql.ExecuteDataset(“select UserName,UserID from vw_Users “, “a”).Tables[0];
ddlBind.DataSource = dt;
ddlBind.DataTextField = “UserName”;

            ddlBind.DataBind();
            ListItem li = new ListItem("--請選擇人員--", "");
            ddlBind.Items.Insert(0, li);
        }
    }

然後定義一個事件:
public event CalculateDelegate CalculateEvent; //定義事件

在點選按鈕事件的時候,將下拉框的選項文字給ddlSelectedText變數,
再把這個變數給新建的事件。
protected void btnQuery_Click(object sender, EventArgs e)
{
//睡眠5s,模擬資料執行操作
Thread.Sleep(5000);
string ddlSelectedText = ddlBind.SelectedItem.Text.ToString();

//如果該事件已經被訂閱,則丟擲事件,
// 這裡也預示著函式已經執行完畢,開始丟擲執行後的結果了
 if (CalculateEvent != null)
  CalculateEvent(ddlSelectedText);

}
父頁面:
aspx:

cs:

public partial class BasicSalary : System.Web.UI.Page
{
    SqlHelper sql = new SqlHelper();

    protected void Page_Load(object sender, EventArgs e)
    {
        WebUserControl1.CalculateEvent += (ddlSelectedText) =>
        {
            //Response.Write("<script>alert('"+ddlSelectedText+"') </script>");
            DataTable dt = sql.ExecuteDataset("select DeptName from vw_Users where UserName='" + ddlSelectedText + "'", "a").Tables[0];
            TextBox1.Text = dt.Rows[0]["DeptName"].ToString();
        };