bindingsources と datagridviews (および VB .NET) を使用したプログラミングは初めてなので、ここに私の質問/問題があります。
ユーザーがバックエンドの SQL 2008 R2 サーバーでデータを更新する VB 2010 でアプリをプログラミングしています (レコードを追加または削除することはなく、すべてのフィールドが更新されるわけではありません)。デザイン モードのフォームには、バインディング ソース、データセット、およびデータ用のさまざまなテキスト ボックスと、フォームの下部にある datagridview があります。
フォームが読み込まれると、DataAdapter が読み込まれ、次にデータセットが読み込まれます。(接続のコードは省略します。"text_table" は SQL サーバーのテスト テーブルです。
frmDataAdapter = New SqlClient.SqlDataAdapter(SQL_Query, frmConnection)
frmConnection.Open()
frmDataAdapter.FillSchema(frmDataSet, SchemaType.Source, "test_table")
frmDataAdapter.Fill(frmDataSet, "test_table")
BindingSource を DataSet にバインドします...
With frmBindingSource
.DataMember = "test_table"
.DataSource = frmDataSet
End With
次に、フォームの DataGridView を BindingSource にバインドします...
frmDataGridView.DataSource = frmBindingSource
さて、「test_table」DBテーブルの一部のフィールドは通貨であり、更新されていないので、次のようにバインドします...
Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total", True, DataSourceUpdateMode.Never, vbNull, "c")
さて問題は…
ユーザーは DataGridView を使用して、問題なく動作しているレコードを移動します。問題が発生するのは、"Total" フィールドが "Null" になる可能性があり、ユーザーが "Total" フィールドに "Null" を含むレコードをヒットしても、フィールドのバインドされたテキスト ボックスで空白にならないことです。 「非 Null」値がある場合にのみ変更されます。
そのため、ユーザーが開始し、最初の 3 つのレコードの「合計」フィールドに「Null」がある場合、そのフィールドのテキスト ボックスは空白のままになります。4 番目のレコードに値がある場合、フィールドのテキスト ボックスはその値に変更されますが、レコードを戻すと、フィールドのテキスト ボックスの値は空白にならず、値を保持し、値が変更されるまで値を保持します。異なる「非 Null」値が見つかりました。
しかし、このように製本中に書式を外すと...
Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total")
すべてが完璧に機能します。
ここで何が間違っているのか、忘れて見落としている単純なことは何か、フォーム上でこれを正しくフォーマットしたいのでどうすれば修正できますか。