为什么我的按钮单击事件处理程序不会被调用?

时间:2011-08-18 16:01:50

标签: c# asp.net viewstate radgrid

我在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上按预期显示。单击它时,会发生回发(并且会再次在Page_PreInit上重新生成RadGrid),但是,从不调用ExportToPdfButtonClick方法。

为什么不调用它?怎么解决?它可能与viewstate和control state有关?

由于

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

RadGrid似乎显然不同,并没有弄清楚为什么事件没有被提出但找到了解决方案。

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

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

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

不确定这些控件何时添加到RadGrid但必须在RadGrid_ItemCreated和RadGrid_Load事件之前以及RadGrid_Init事件之后。无论如何,它现在已经解决了。