Tuesday, December 13, 2016

Delegate : Access method from parent page(aspx) to child page(control) using delegate.

Delegate : How to access method from parent page(aspx) to child page(control) using delegate.


Here i want to call function from parent page to child page. Here i have gridview at aspx(Detail.aspx) page. Also bindgrid() method having on code page. And i have create control on this page, at that control page i want reload bindgrid() method to refresh the gridview.

Method to bindGrid() at parent (aspx) page as below:
private void bindGrid()
        {
            DataTable dt = new DataTable();
            dt = _clsDetail.GetData();
            if (dt != null && dt.Rows.Count > 0)
            {
                gvDetail.DataSource = dt != null && dt.Rows.Count > 0 ? dt : null;
                gvDetail.DataBind();
                ViewState["gvDetail"] = dt != null && dt.Rows.Count > 0 ? dt : null;
            }
        }

For this functionality i have create a delegate, having no parameter on control page like:

        public delegate void delegate_name();
        public event delegate_name event_name;

Example:
        public delegate void DataSaveCalled();
        public event DataSaveCalled DataSaved;

And here i have call this DataSaved function after DetailSave button click as below at control page:

protected void btnDetailSave_Click(object sender, EventArgs e)
        {
            try
            {
                string strout = "";
                bool status = false;
                _clsDetail.add_Detail(out strout, out status);

                if (status == true)
                {
                    lblMsg.Text="Request added successfully.";

                    //To access the bindGrid() method here:
                    if (DataSaved != null)
                    {
                        DataSaved();
                    }
                }
                else
                {
                    lblMsg.Text="Request not added.";
                }
            }
            catch (Exception ex)
            { throw ex }
        }

Now i assign that method from parend (aspx) page to control page using define delegate at child (control) page like:

At Page_Load() of parent (aspx) page:

protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                control_name.event_name += new Controls.control_name.delegate_name(assign_function_to_call);
            }
        }

Example:
protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ccShowRequest.DataSaved += new Controls.Detail.OnDataSaveCalled(bindGrid);             
            }
        }

This is all about delegate, That you want to access method from parent page(aspx) to child page(control).

No comments:

Post a Comment