0

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")

すべてが完璧に機能します。

ここで何が間違っているのか、忘れて見落としている単純なことは何か、フォーム上でこれを正しくフォーマットしたいのでどうすれば修正できますか。

4

1 に答える 1

0

問題の答えが見つかりました... (13 時間連続で数日間働いた後、睡眠を確保するのに役立ちます)

ドキュメントをもう少しよく読んでいたら、データバインディング行の「vbNull」を変更することを知っていたでしょう...

Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total", True, DataSourceUpdateMode.Never, vbNull, "c")

ただvbNullStringになるには...

Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total", True, DataSourceUpdateMode.Never, vbNullString, "c")

そのため、DBNull が検出されるとデフォルトで「空白」(つまり vbNullString) になります。機能する SQL クエリを変更する必要はありません。

于 2012-12-24T14:44:02.097 に答える