DataGridView で BindingNavigator から行を移動すると、System.Data.NoNullAllowedException が発生する

こんにちは、Platform SDK (Windows SDK) サポートチームです。
今回は、.NET Framework 4.0 ~ 4.7.1 で確認されている BindingNavigator の動作についてご案内します。
 

現象

DataGridView の一番下に表示される「行の追加オプション」行 (※ 図 1 の赤枠部分) を選択した状態で、BindingNavigator コントロールの [前に戻る] または [最初に移動] (※ 図 1 の黄枠部分) をクリックすると、System.Data.NoNullAllowedException 例外が発生します。
この例外は、プログラムが以下のいずれかの条件に該当している場合に発生することが判明しています。
 

  • 条件 (1) DataGridView.AllowUserToAddRows プロパティを true に設定している
  • 条件 (2) DataGridView にバインドされているデータの DataColumn.AllowDBNull プロパティを false に設定している
  • 条件 (3) プログラムを .NET 4.0 ~ .NET 4.7.1 でビルドしている

 
※ 図 1 : 「行の追加オプション」行

 

原因

.NET 4.0 ~ .NET 4.7.1 では、DataGridView の一番下に表示される「行の追加オプション」行を選択した状態で、BindingNavigator コントロールの ToolStripButton から [前に戻る] または [最初に移動] で操作すると、.NET Framework の内部で新しい行を作成・追加する処理が発生します。
このため、前述した条件 (2) に該当していると、System.Data.NoNullAllowedException 例外が発生します。
.NET 3.5.1 までは、同じ操作を行っても .NET Framework 内部で新しい行を作成・追加する処理が発生しないため、例外が発生しません。
 

回避策

前述した条件 (1) ~ (3) に該当しないように、プログラムを変更してください。