2016-04-30 32 views
2

DataGridViewにComboBoxColumnを追加し、BindingSourcesを使用して関連する別のDepartmentテーブルにリンクしています。DGVコンボボックスが表示されますが、デフォルト値はありません

新しい行が(アカウント)最初にリストされている部署を表示しますが、それはデフォルトでそれを選択しない、エラーの原因:

Cannot insert the value NULL into column 'DeptID', table 'StaffDB.dbo.Staff'; column does not allow nulls. INSERT fails.

答えhere at SOからのアドバイスに続いて、私は次のように使用していますデフォルト設定するには、次の

comboCol.DefaultCellStyle.NullValue = _bsDept(0)("Department") 
    comboCol.DefaultCellStyle.DataSourceNullValue = _bsDept(0)("DeptID") 

これは、値4と「アカウント」で、デバッグに動作しているように見えますが、それでも同じエラーが得られます。

Dim comboCol = New DataGridViewComboBoxColumn() 
    comboCol.DataSource = _bsDept 
    comboCol.ValueMember = "DeptID" 
    comboCol.DisplayMember = "Department" 
    'staff table.. 
    comboCol.DataPropertyName = "DeptID" 

    comboCol.HeaderText = "Department" 
    comboCol.DefaultCellStyle.Format = "d" 

    'the first Department "Accounts" appears to be selected, but it isn't 
    comboCol.DefaultCellStyle.NullValue = _bsDept(0)("Department") 
    comboCol.DefaultCellStyle.DataSourceNullValue = _bsDept(0)("DeptID") 

    dgvStaff.Columns.Add(comboCol) 

はなぜ私のデフォルト値が無視されている。ここで

は、コンボボックスに関連するすべての設定はありますか? (ComboBoxは自分自身でDepartmentを選択した場合に機能します)

+1

これらの 'DefaultCellStyle'小道具は、Nullsの表示方法を制御する以上のことをしていません。より適切かもしれない 'DefaultValuesNeeded'イベントがあります – Plutonix

+0

ありがとう、それはある意味があります;)。このコードを使用して回答として追加すると、このコードを使用できます。e.Row.Cells( "Department")。Value = _bsDept(0)( "DeptID") –

答えて

1

DefaultCellStyleの小道具は、名前の付いたNullなどの表示方法を制御するだけでは不十分です。 DefaultValuesNeededイベントがあり、デフォルト値を設定するのに適しています。たとえば、(いくつかのコード私はちょうどそれを行うこと便利を持っている):あなたのケースで

Private Sub dgv2_DefaultValuesNeeded(sender As Object, 
       e As DataGridViewRowEventArgs) Handles dgv2.DefaultValuesNeeded 
    'defaults 
    e.Row.Cells("Fish").Value = "Cod" 
    e.Row.Cells("Bird").Value = "Raven" 
    e.Row.Cells("itemDate").Value = DateTime.Now.Date 
End Sub 

、あなたは部門のソースから値を供給します。

+0

これは問題を解決しました。ありがとうございます。例外がnull値を指定し、プロパティが 'デフォルトnulls'のためのものだが、そこに行くなら、プロパティの命名は役に立たない。 –

+0

もっと一般的には、新しい行をデータソースに追加する...これ'AllowUserToAddRows' = trueのときのためのものです。 – Plutonix

関連する問題