Событие SelectionChange объекта DataGridView запускается дважды в DataBinding даже после удаления привязки события - PullRequest
1 голос
/ 03 июня 2010

Этот код запускает событие изменения выбора дважды. как я могу предотвратить это? В настоящее время я использую флаг или выделенное свойство, чтобы предотвратить это. Но как на самом деле?

Я использую его на winfoms

EDIT

Моя ошибка при написании Вопрос, вот правильный код, который я хотел спросить

private void frmGuestInfo_Load(object sender, EventArgs e)
{
this.dgvGuestInfo.SelectionChanged -= new System.EventHandler(this.dgvGuestInfo_SelectionChanged);
dgvGuestInfo.DataSource=dsFillControls.Tables["tblName"];
this.dgvGuestInfo.SelectionChanged += new System.EventHandler(this.dgvGuestInfo_SelectionChanged);
}

private void dgvGuestInfo_SelectionChanged(object sender, EventArgs e)
{
//this function is raised twice, i was expecting that this will not be raised 
}

Ответы [ 2 ]

0 голосов
/ 06 июня 2011

У меня та же проблема: иногда отмена регистрации в SelectionChanged работает, иногда нет.

И я отменяю регистрацию / перерегистрацию в конструкции try / finally:

            this.SelectionChanged -= ManageSelectionChanged;

            try
            {
                // code that could fire this.SelectionChanged
            }
            finally
            {                    
                this.SelectionChanged += ManageSelectionChanged;                 
            }

Я тоже решил использовать закрытый флаг, но ... Мне все еще интересно.

0 голосов
/ 03 июня 2010

Событие будет срабатывать каждый раз, когда вы устанавливаете свойство DataSource.

Вы должны установить DataSource только один раз.

Возможно, вы добавляете один и тот же обработчик событий дважды.
Щелкните правой кнопкой мыши dgvGuestInfo_SelectionChanged и выберите «Найти все ссылки».

Также проверьте стек вызовов в обработчике событий.

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