【问题标题】:Asp.net Web Forms Event not fired in custom control from a nested controlAsp.net Web Forms 事件未在嵌套控件的自定义控件中触发
【发布时间】:2014-06-20 10:07:58
【问题描述】:

我有一个继承 GridView 的自定义控件。 我已经编写了一个继承 BoundField 的类来创建一个将图像显示到 ButtonClick 控件中的列。 当我点击它时,这个“图像栏”会引发一个事件。 在第一个GridView自定义控件中,我绑定了“图片列点击”的事件。它永远不会被解雇。

图片栏目代码:

using System.Web.UI;
using System.Web.UI.WebControls;
using WebControls.Infrastructure;

namespace WebControls
{

    public class DataSearchGridImageColumn : BoundField
    {

        public event StringDelegate ImageClicked;

        public string ImageUrl
        {
            get
            {
                return (string)ViewState["ImageUrl"] ?? string.Empty;
            }
            set
            {
                ViewState["ImageUrl"] = value;
            }
        }

        protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
        {
            var img = new ImageButton
            {
                ID = "ImgSelectRecord",
                ImageUrl = ImageUrl,

            };
            cell.Controls.Add(img);

            img.Click += ImgClick;

        }

        void ImgClick(object sender, ImageClickEventArgs e)
        {

            var img = sender as ImageButton;

            if (img == null) return;

            var row = (GridViewRow)img.NamingContainer;

            if (row == null) return;

            // get the id
            var id = row.Cells[1].Text;


            // raise an event
            OnClick(id);

        }

        protected virtual void OnClick(string id)
        {
            if (ImageClicked != null)
            {
                ImageClicked(this, id);
            }
        }

    }

}

我绑定事件的数据视图自定义控件代码:

protected override void OnDataBinding(EventArgs e)
{
    // create a new page because the Page object is null in this context
    var pg = new Page();

    var selectionColumn = new DataSearchGridImageColumn
    {
        ImageUrl = string.Format(
            "url({0})",
            pg.ClientScript.GetWebResourceUrl(GetType(), "WebControls.Images.search.png"))
    };


    Columns.Clear();
    Columns.Add(selectionColumn);
    Columns.Add(CreateColumn(ValueFieldName, ValueFieldName));
    Columns.Add(CreateColumn(TextFieldName, TextFieldName));

    AutoGenerateColumns = false;

    selectionColumn.ImageClicked += SelectionColumnImageClicked;

    base.OnDataBinding(e);

}

void SelectionColumnImageClicked(object sender, string value)
{
    if (RowSelected != null)

        RowSelected(this, value);
}

【问题讨论】:

    标签: c# asp.net events gridview custom-controls


    【解决方案1】:

    根据您的描述,似乎您的父控件中的事件会触发,但不会触发子控件中的事件,对吧?

    看看这个site...

    【讨论】:

    • 我在您的链接中找到了解决方案。覆盖主控件中的 OnBubbleEvent 方法,我得到了引发点击的对象。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多