If you're trying to attach an event to a button within a gridview might I suggest in your base page on the prerender event parse through all gridviews on the page (use a recursive findcontrol algorithm) and look for any imagebuttons, if you find one you should then be able to attach an event to it.
EDIT:
I use something similar in the following:
 public abstract class AmendmentPopUpWindow : BaseMasterPlanPage
    {
        // override this method if the correct save controls arent being hidden in the popups
        public virtual IEnumerable<WebControl> SaveControls
        {
            get { return Controls.All().OfType<WebControl>().Where(c => c.ID.ToLower().Contains("save")); }
        }
        protected override void OnPreRender(EventArgs e)
        {
            if (WebConfiguration.Global_EnableAmendments && SystemVersion.HasValue)
            {
                foreach (var control in Controls.All())
                {
                    if (control is RadioButton || control is TextBox || control is DropDownList || control is RadComboBox || control is CheckBox || control is CheckBoxList ||
                        control is RadEditor || control is RadTextBox || control is RadNumericTextBox)
                    {
                        var webControl = control as WebControl;
                        webControl.Enabled = false;
                        webControl.ForeColor = Color.Gray;
                    }
                }
                foreach (var saveControl in SaveControls)
                    saveControl.Visible = false;
            }
            base.OnPreRender(e);
        }
EDIT: The .All() is an extension method defined as follows (stolen from here)
public static IEnumerable<Control> All(this ControlCollection controls)
{
    foreach (Control control in controls)
    {
        foreach (Control grandChild in control.Controls.All())
            yield return grandChild;
        yield return control;
    }
}