【发布时间】:2011-07-26 15:25:10
【问题描述】:
我有一个 RadGrid 控件,它在 page_init 上动态创建并添加到页面上 updatePanel 内的占位符。
我需要向 RadGrid 的 CommandItem 部分添加一个新按钮。按钮必须支持完全回发。
RadGrid 有一个名为 RadGrid_ItemCreated() 的事件,这就是我添加新按钮的地方,它出现在我的 RadGrid 上:
protected virtual void RdGridItemCreated(object sender, GridItemEventArgs e)
{
var itemType = e.Item.ItemType;
switch (itemType)
{
// other cases...
case GridItemType.CommandItem:
{
var gridCommandItem = e.Item as GridCommandItem;
if (gridCommandItem == null) return;
if (this.EnablePdfExport)
{
var pdfButton = CreateExportToPdfButton();
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);
}
break;
}
}
}
按钮有一个 Click 事件,并且添加了一个方法作为事件处理程序:
private Button CreateExportToPdfButton()
{
var result = new Button();
result.ID = "btnExportToPdf";
result.Click += ExportToPdfButtonClick;
result.CssClass = "rgExpPDF";
result.CommandName = "ExportToPdf";
result.Attributes.Add("title", "Export to Pdf");
return result;
}
为了注册这个控件的回发事件,我使用了 ScriptManager 的 RegisterPostBackControl() 方法。
public static void RegisterPostBackControl(Control control)
{
var currentPage = (Page) HttpContext.Current.CurrentHandler;
var currentScriptManager = ScriptManager.GetCurrent(currentPage);
if (currentScriptManager != null)
{
currentScriptManager.RegisterPostBackControl(control);
}
}
当我单击 RadGrid 上的按钮时,它会回传到服务器,但问题是它的 Click 事件从未引发:
private void ExportToPdfButtonClick(object sender, EventArgs e)
{
// process
}
我不明白为什么;有什么想法/帮助吗?
如果我没有为按钮设置 ID,则会引发 click 事件,但在这种情况下会出现一个新问题。当外部下拉列表在页面上发生部分回发以更新 radgrid 时,我的自定义导出按钮会异步发送回发,而它应该完全回发。
非常感谢,
【问题讨论】:
标签: button updatepanel postback radgrid