2014-12-28 4 views
0

У меня есть DataGridView, который имеет ячейки проверяющий событие так что пользователь должен заполнить ячейку в столбце [0], прежде чем оставить в этой ячейкеКак отключить событие временно

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
    { 
     if (string.IsNullOrWhiteSpace(dataGridView1.CurrentRow.Cells[0].FormattedValue.ToString())) 
     { 
      MessageBox.Show("Please fill this field"); 
      e.Cancel = true; 
     } 

    } 

Я хочу удалить строку с помощью кнопки, даже если все ячейки на том, что строка пуста, но каждый раз, когда я нажимаю DeleteRow_btn сообщения проверок показывает

private void DeleteRow_btn_Click(object sender, EventArgs e) 
     { 
      dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index); 
      if (dataGridView1.Rows.Count < 1) 
      { 
       dataGridView1.Rows.Add(); 
      } 
     } 

я уже попробовать

private void DeleteRow_btn_Click(object sender, EventArgs e) 
{ 
     dataGridView1.CellValidating -= dataGridView1_CellValidating; 
     dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index); 
     if (dataGridView1.Rows.Count < 1) 
     { 
      dataGridView1.Rows.Add(); 
     } 
     dataGridView1.CellValidating += dataGridView1_CellValidating; 
} 

но это не работает, я знаю почему, но я не знаю, как это решить спасибо за ваше время, извините за мой английский так или иначе

+0

Проверьте, установлен ли обработчик событий в нескольких местах. –

+0

Добро пожаловать. Кроме того, поскольку вы новичок в StackOverflow, я хотел бы сообщить вам, что вы можете продвигать хорошие ответы и принимать ответ, который помог вам наиболее эффективно, установив отметку рядом с ответом. На этом сайте верхний или принятый ответ считается «спасибо». –

ответ

0

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

Решение должно отображать сообщение проверки только в том случае, если строка не пуста. То есть если все ячейки пустые, сообщение подтверждения не должно появляться.

bool isRowEmpty = dataGridView1.CurrentRow.Cells 
    .Cast<Cell>() 
    .All(cell => IsNullOrWhiteSpace(cell.FormattedValue.ToString())); 
if (isRowEmpty) { 
    // validate 
} 
+0

спасибо, что действительно помогают – Barakuan

Смежные вопросы