2012-06-18 158 views
2

我有一個datagridview綁定到數據源,列[0] AgencyName是一個主鍵,不能爲空。 單擊Bindingnavigator(+)加號添加新行(兩次)將導致錯誤「Column(AgencyName)不允許爲空」。如何處理這個空的異常?Datagridview列不允許空

總體而言,您可以告訴我如何處理綁定到數據源的datagridview中的null和主鍵約束。請注意,我只是將一個數據源拖到一個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的Cancel屬性設置爲

在驗證事件委託中爲true,則通常在驗證事件之後發生的所有事件都被抑制。

因此,通過設置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()是我在尋找的。非常感謝你。 :) –