Рассмотрим форму, в которой dataGridView привязан к строго типизированному набору данных.Вверху имеется поле со списком, позволяющее пользователю выбрать сотрудника.После выбора набор данных gataGridView заполняется на основе идентификатора сотрудника.
Некоторый ввод данных выполняется в dataGridView и после его завершения пользователь сохраняет данные.Чтобы пользователь случайно не перешел к другому сотруднику и не удалил то, что он набрал, я предлагаю сохранить его, так как набор данных HasChanges () имеет значение true.
Я ловил этот фрагмент кода в событии SelectedIndexChangedполе со списком, но это также вызывает событие в SelectedValueChanged
private void checkSaveChanges()
{
this.Validate();
this.laborTicketBindingSource.EndEdit();
if (dP_LaborTicket.HasChanges())
{
DialogResult result = MessageBox.Show("Do you want to save your changes?", "Save before closing?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (result == DialogResult.Yes)
this.tableAdapterManager.UpdateAll(this.dP_LaborTicket);
}
}
Вот фрагмент события, которое возникает:
private void cmbEmployeeID_SelectedIndexChanged(object sender, EventArgs e)
{
checkSaveChanges();
if (cmbTransactionDate != null && cmbEmployeeID.SelectedValue != null)
{
string selectedDate = cmbTransactionDate.Value.ToString("MM/dd/yyyy");
string selectedEmployee = cmbEmployeeID.SelectedValue.ToString();
this.laborTicketTableAdapter.Fill(this.dP_LaborTicket.LaborTicket, selectedEmployee, selectedDate);
}
}
Итак, зайдя в это, как только я изменю записьи перейти к другому сотруднику, он вступает в checkSaveChanges.Успешно проверяет и завершает редактирование и проверяет, есть ли в нем изменения (что он и делает).
После выполнения MessageBox.Show, программа внезапно отправляется обратно в событие cmbEmployeeID_SelectedIndexChanged, где она снова вызывает checkSaveChanges.Это происходит только дважды, и даже если они говорят «да» или «нет», код в блоке подсказок запускается.
Как в мире MessageBox. Как это вызывается дважды?Если я прокомментирую эту строку, этого не произойдет ...
РЕДАКТИРОВАТЬ В качестве дополнительной информации в поле со списком AutoCompleteMode было установлено значение SuggestAppend (Показывает раскрывающийся список при наборе текста) иDropDownStyle установлен в DropDownList.
Я изменил AutoCompleteMode на Append, и это больше не происходит, похоже, это происходит только в режиме SuggestAppend ...