Событие подключено 2 раза - PullRequest
0 голосов
/ 21 января 2010

У меня проблема с событием, так как Page_Init, Page_Load, когда я нажимаю на Gridview внутри моей страницы, они подключаются 2 раза.

Я проверил AutoEventWireup, но aspx и ascx верны (false и OnInit переопределяются).

Событие из Gridview устанавливается в Page_Init, но такое же поведение, если оно в Page_Load. Я использую одно и то же событие для 2 Gridviews.

Некоторые идеи, чтобы помочь мне?

Вот образец моего кода

    protected override void OnInit(EventArgs e)
    {
        instance = (IServiceActivity)InterfaceRepository.GetService(typeof(ServiceActivity));

        this.Load += new EventHandler(Page_Load);
        this.CollectionGridView1.RowDeleting += new GridViewDeleteEventHandler(CollectionGridView1_RowDeleting);
        this.CollectionGridView1.RowDataBound += new GridViewRowEventHandler(CollectionGridView1_RowDataBound);
        this.CollectionGridView1.RowEditing += new GridViewEditEventHandler(CollectionGridView1_RowEditing);
        this.CollectionGridView1.Sorting += new GridViewSortEventHandler(CollectionGridView1_Sorting);
        this.CollectionGridView1.PageIndexChanging += new GridViewPageEventHandler(CollectionGridView1_PageIndexChanging);

        this.CollectionGridView2.RowDeleting += new GridViewDeleteEventHandler(CollectionGridView1_RowDeleting);
        this.CollectionGridView2.RowDataBound += new GridViewRowEventHandler(CollectionGridView1_RowDataBound);
        this.CollectionGridView2.RowEditing += new GridViewEditEventHandler(CollectionGridView1_RowEditing);
        this.CollectionGridView2.Sorting += new GridViewSortEventHandler(CollectionGridView1_Sorting);
        this.CollectionGridView2.PageIndexChanging += new GridViewPageEventHandler(CollectionGridView1_PageIndexChanging);

        base.OnInit(e);
    }

   protected void CollectionGridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        CollectionGridView cgv = (CollectionGridView)sender;
        cgv.SelectedIndex = e.RowIndex;
        CvrActivity cvrAct = new CvrActivity();
        cvrAct = instance.GetActivityById(long.Parse(cgv.SelectedDataKey.Value.ToString()));

        if (cvrAct != null)
        {
            //DELETE        
        }
    }

    protected void CollectionGridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        CollectionGridView cgv = (CollectionGridView)sender;
        cgv.SelectedIndex = e.NewEditIndex;
        base.Modify(long.Parse(cgv.SelectedDataKey.Value.ToString()));
    }

Наконец, проблема возникает в CommandField, когда он находится в ButtonType = "Image", редактирование или удаление запускается 2 раза.

Тогда как использовать ButtonType с изображением?

Ответы [ 3 ]

0 голосов
/ 21 января 2010

Если существует вероятность того, что событие уже подключено, вы можете удалить его, прежде чем пытаться добавить. Попытка удалить обработчик события там, где его нет, не вызовет исключение.

// remove existing handler if present
this.CollectionGridView1.RowDeleting -= new GridViewDeleteEventHandle(CollectionGridView1_RowDeleting); 
// add new handler
this.CollectionGridView1.RowDeleting += new GridViewDeleteEventHandle(CollectionGridView1_RowDeleting); 

В соответствии с шаблоном remove, затем add гарантирует, что событие будет обработано только один раз.

0 голосов
/ 28 января 2010

Находится ли ваша сетка внутри панели обновления ajax?

Однажды у меня была похожая проблема, которая была устранена путем удаления панели обновления.

0 голосов
/ 21 января 2010

Закомментируйте те, которые подключены, и посмотрите, что произойдет? : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...