2012-06-18 7 views
2

У меня есть datagridview, связанный с источником данных, столбец [0] AgencyName является первичным ключом и не может быть нулевым. Нажатие на знак Bindingnavigator (+) плюс для добавления новой строки (дважды) приведет к ошибке «Column (AgencyName) не разрешает null». Как обрабатывать это NULL-исключение?Столбец Datagridview не разрешает null

В целом вы можете показать мне, как обрабатывать ограничение null и первичного ключа в datagridview, привязанном к источнику данных. Обратите внимание, что я просто перетащил источник данных в winform, чтобы создать это.

Form

У меня есть этот код

private void clientsDataGridView_Validating(object sender, CancelEventArgs e) 
    { 

     DataGridViewRow row = clientsDataGridView.CurrentRow as DataGridViewRow; 

     if (row.Cells[0].Value == DBNull.Value) 
     { 

      clientsDataGridView.CancelEdit();     
      e.Cancel = true; 

     } 
    } 

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

ответ

3

от Control.Validating Описания событий (которые DataGridView наследует от):

Если Отменить свойство CancelEventArgs устанавливаются в true в делетете события Validating, все события, которые обычно происходят после того, как событие Validating будут подавлены.

Итак, установив e.Cancel = true, вы передаете DataGridView для отмены всех следующих событий (включая RowLeave).

Вы используете источник Bindingsource и привязываете Datagridview к нему? Если это так, я бы попытался вызвать Bindingsource.CancelEdit() вместо Datagridview.CancelEdit().

Или, может быть:

Dim bm As BindingManagerBase = clientsDatagridView.BindingContext(clientsDatagridView.DataSource, clientsDatagridView.DataMember) 
bm.CancelCurrentEdit() 
+0

Спасибо. Bindingsource.CancelEdit() - это то, что я ищу. Большое спасибо. :) –