2010-04-05 1 views
0

Я пытаюсь подклассифицировать DataList, чтобы принять новую команду из встроенных LinkButtons. Вот мой абстрактный класс:Расширение DataList, чтобы принять новый InsertCommand из LinkButtons

public abstract class BaseFieldGroup : DataList 
{ 
    public const string InsertCommandName = "Insert"; 
    public event DataListCommandEventHandler InsertCommand 
    { 
     add 
     { 
      base.Events.AddHandler(EventInsertCommand, value); 
     } 
     remove 
     { 
      base.Events.RemoveHandler(EventInsertCommand, value); 
     } 
    } 
    private static readonly object EventInsertCommand; 
    static BaseFieldGroup() 
    { 
     EventInsertCommand = new object(); 
    } 
    protected virtual void OnInsertCommand(DataListCommandEventArgs e) 
    { 
     DataListCommandEventHandler handler = (DataListCommandEventHandler)base.Events[EventInsertCommand]; 
     if (handler != null) 
     { 
      handler(this, e); 
     } 
    } 
} 

это кажется право, но событие не поймали; Я не знаю, почему. Тем не менее, я также заметил, что LinkButton отправляет даже вверх с RaiseBubble, я не знаю, является ли это проблемой или нет. У кого-нибудь есть мысли?

Ох, это 2.0

ответ

0

Aha! Найден и исправлен; Я должен переопределить OnBubbleEvent из DataList, чтобы разместить (вызвать) новую команду. См. Ниже:

public abstract class BaseFieldGroup : DataList 
{ 
... 
    protected override bool OnBubbleEvent(object source, EventArgs e) 
    { 
     bool flag = false; 
     if (e is DataListCommandEventArgs) 
     { 
      DataListCommandEventArgs args = (DataListCommandEventArgs)e; 
      this.OnItemCommand(args); 
      flag = true; 
      switch (args.CommandName) 
      { 
       case SelectCommandName: 
        this.SelectedIndex = args.Item.ItemIndex; 
        this.OnSelectedIndexChanged(EventArgs.Empty); 
        return flag; 
       case EditCommandName: 
        this.OnEditCommand(args); 
        return flag; 
       case DeleteCommandName: 
        this.OnDeleteCommand(args); 
        return flag; 
       case UpdateCommandName: 
        this.OnUpdateCommand(args); 
        return flag; 
       case CancelCommandName: 
        this.OnCancelCommand(args); 
        return flag; //?? 
       case InsertCommandName: 
        this.OnInsertCommand(args); 
        return flag; 
      } 
     } 
     return flag; 
    } 
Смежные вопросы