Почему мой обработчик события нажатия кнопки не вызывается? - PullRequest
1 голос
/ 18 августа 2011

Я создал элемент управления RadGrid динамически для события Page_PreInit и добавил его в качестве заполнителя на странице. мой класс RadGridBuilder имеет метод Build ().

В моей RadGrid есть пользовательская кнопка, которая добавляется во время события ItemCreated, которое вызывается при создании RadGrid (Page_PreInit):

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 никогда не вызывается.

Почему это не называется? как это исправить? это может быть связано с состоянием просмотра и состоянием управления?

Спасибо

Ответы [ 2 ]

2 голосов
/ 18 августа 2011
0 голосов
/ 20 августа 2011

RadGrid, похоже, отличается от других и не выяснил, почему событие не было инициировано, но нашел решение.

Я создал новый класс, реализующий интерфейс ITemplate и назначив его свойству CommandItemTemplate моего объекта RadGrid.MasterTableView.

Затем добавление моих пользовательских элементов управления в методе Instantiate () моего нового класса, и, наконец, вызывается событие click; в основном перестраиваю мою командную строку:

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

Не уверен, в какой момент эти элементы управления добавляются в RadGrid, но должны быть перед событиями RadGrid_ItemCreated и RadGrid_Load и после события RadGrid_Init. в любом случае, это решено сейчас.

...