我在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有关?
由于
答案 0 :(得分:2)
尝试按照
在page_init或page_load上绑定此事件ASP.Net: why is my button's click/command events not binding/firing in a repeater?
答案 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事件之后。无论如何,它现在已经解决了。