【问题标题】:Why my button click event handler doesn't get called?为什么我的按钮单击事件处理程序没有被调用?
【发布时间】:2011-08-18 16:01:49
【问题描述】:

我在 Page_PreInit 事件上动态创建了一个 RadGrid 控件,并将其添加到页面上的占位符中。我的 RadGridBuilder 类有一个 Build() 方法。

我的 RadGrid 有一个自定义按钮,该按钮是在构建 RadGrid (Page_PreInit) 期间调用的 ItemCreated 事件时添加的:

protected virtual void RdGridItemCreated(object sender, GridItemEventArgs e)
    {          
        switch (e.Item.ItemType)
        {            
            // other codes
            case GridItemType.CommandItem:
                {
                    var gridCommandItem = e.Item as GridCommandItem;

                    AddPdfButton(gridCommandItem);

                    break;
                }
        }
    }


private void AddPdfButton(GridCommandItem gridCommandItem)
    {
        var pdfButton = CreateExportToPdfButton();

        try
            {
                PageUtil.RegisterPostBackControl(pdfButton);

                // this is the cell which contains the export buttons.
                ((Table) gridCommandItem.Cells[0].Controls[0]).Rows[0].Cells[1].Controls.Add(pdfButton);

            }
            catch
            {
                // LOG the error silently
            }
        }
    }
 private Button CreateExportToPdfButton()
    {
        var result = new Button();
        result.ID = "btnExportToPdf";
        result.Click += ExportToPdfButtonClick;
        result.CssClass = "rgExpPDF";
        result.CommandName = "ExportToPdfCustomCommand";
        result.Attributes["title"] = "Export to Pdf";
        return result;
    }
private void ExportToPdfButtonClick(object sender, EventArgs e)
   {
        // custom code
   }

Pdf 图标按预期显示在 RadGrid 上。单击它时,会发生回发(并且 RadGrid 显然会在 Page_PreInit 上重新生成),但是,永远不会调用 ExportToPdfButtonClick 方法。

为什么不调用它?如何解决?可能跟viewstate和control state有关?

谢谢

【问题讨论】:

    标签: c# asp.net viewstate radgrid


    【解决方案1】:

    【讨论】:

    • 不,我已经用 page_load、pare_init 和 page_preinit 对其进行了测试;未引发事件处理程序。 page_load 在视图状态加载后引发。
    • 你确定你的代码是正确的......因为这是你绑定动态处理程序的方式。你在 page_init 中添加了什么?
    • 是的,代码是正确的; RadGrid 似乎需要自己的管道方式! - 看我的回答。
    【解决方案2】:

    RadGrid 似乎明显不同,并没有弄清楚为什么没有引发事件但找到了解决方案。

    我创建了一个实现 ITemplate 接口的新类,并将其分配给我的 RadGrid.MasterTableView 对象的 CommandItemTemplate 属性。

    然后在我的新类的 Instantiate() 方法中添加我的自定义控件,最后引发点击事件;基本上重建我的命令行:

    http://www.telerik.com/help/aspnet-ajax/grid-commanditemtemplate.html

    不确定这些控件在什么时候添加到 RadGrid,但必须在 RadGrid_ItemCreated 和 RadGrid_Load 事件之前和 RadGrid_Init 事件之后。反正现在已经解决了。

    【讨论】:

      猜你喜欢
      • 2023-02-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 2020-10-29
      相关资源
      最近更新 更多