Расширение DataList для принятия новой команды InsertCommand из LinkButtons - PullRequest
0 голосов
/ 06 апреля 2010

Я пытаюсь создать подкласс DataList для принятия новой команды от встроенных кнопок LinkButton. Вот мой абстрактный класс:

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

1 Ответ

0 голосов
/ 06 апреля 2010

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