2010-04-05 9 views
0

J'essaie de sous-classer DataList pour accepter une nouvelle commande à partir des LinkButtons incorporés. Voici ma classe abstraite:Extension de DataList pour accepter une nouvelle InsertCommand à partir de 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); 
     } 
    } 
} 

il semble droit, mais l'événement n'est pas pris; Je ne suis pas sûr pourquoi. Cependant, j'ai également remarqué que LinkButton envoie le même avec un RaiseBubble, je ne sais pas si c'est un problème ou non. Quelqu'un a des pensées? Oh, c'est 2,0

Répondre

0

Trouvé et fixé; Je dois remplacer l'OnBubbleEvent de la DataList pour accommoder (appeler) la nouvelle commande. Voir ci-dessous:

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; 
    }