У меня есть DataGridView со связанными данными, но есть столбец флажка, который не связан, что я отслеживаю себя. EditMode - EditProgrammatically. Когда пользователь пытается отключить этот флажок, я выхожу окно с сообщением, если они уверены, что хотят его отключить. Если они выберут «да», я отключу его. Нет, я отменяю редактирование. Когда они выбирают «да», и я меняю значение, окно сообщения снова срабатывает. Кто-нибудь знает, почему это происходит?Message Box стреляет дважды при редактировании ячейки CheckBox в DataGridView
Вот код в вопросе:
private void dgv1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (dgv1.BeginEdit(false))
dgv1.EndEdit();
}
private void dgv1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
if (dgv1.Columns[e.ColumnIndex].Name == "Enabled")
{
DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dgv1.Rows[e.RowIndex].Cells["Enabled"];
if (checkCell.Value.Equals(checkCell.FalseValue))
{
checkCell.Value = checkCell.TrueValue;
}
else
{
DialogResult result = MessageBox.Show(this, "Are you sure you want to Disable this?", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2);
if (result == DialogResult.No)
e.Cancel = true;
else
checkCell.Value = checkCell.FalseValue;
}
}
private void dgv1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
dgv1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
Это должно быть легко разрешено с некоторой отладкой. Поместите некоторую точку останова на 'if (checkCell.Value.Equals (checkCell.FalseValue))' и проверьте значение 'checkCell.Value' ... –
Значения верны. Думаю, я, возможно, дважды позвонил в MessageBox.Show. Тем не менее, это довольно грязный способ сделать это. – PattersonWR