0

BindingSources と DataNavigators (および VB .NET) を使用したプログラミングは初めてなので、ここに私の質問/問題があります。

ユーザーがバックエンドの SQL 2008 R2 サーバーでデータを更新する VB 2010 でアプリをプログラミングしています。デザイン モードのフォームには、BindingSource、DataSet、データ用のさまざまなテキスト ボックス、チェック ボックス、およびフォームの下部にある DataNavigator があります。

フォームが読み込まれると、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 と DataNavigator にバインドします...

With frmBindingSource
   .DataMember = "test_table"
   .DataSource = frmDataSet
End With
frmBindingNavigator.BindingSource = frmBindingSource

そして、テキストボックスとチェックボックスを BindingSource にバインドします...

With Me
    .Date_Logged.DataBindings.Add("Text",frmBindingSource, "DateLogged", True, DataSourceUpdateMode.OnValidation, vbNullString, "MM/dd/yyyy")
    .Prepared_By.DataBindings.Add("Text", frmBindingSource, "PreparedBy", False, DataSourceUpdateMode.OnValidation, vbNullString)
    .Issue_Placement.DataBindings.Add("Text", frmBindingSource, "IssuePlacement", False, DataSourceUpdateMode.OnValidation, vbNullString)
    .Completed.DataBindings.Add("Checked", frmBindingSource, "Completed", False, DataSourceUpdateMode.OnValidation, False)
End With

問題は、「完了」チェックボックスが「frmBindingSource」にバインドされている間、BindingNavigator のレコード追加ボタンを押すと、他のすべてのコントロール (テキストボックス) がクリアされないため、ユーザーが新しいデータを入力できることですが、 DataNavigator のカウントがインクリメントされると、新しいレコードが作成されます。(その時点で、私は通常、プログラムが実際にテーブルに何かを保存するのを止めます。)

「完了」チェックボックスのバインディングを削除してからもう一度試してください。レコードの追加ボタンを押すと、他のテキストボックスがクリアされます。「完了」チェックボックスのバインドを元に戻すと、機能しなくなります。

SQL サーバーの "Completed" フィールドは "bit" で、デフォルトは "0" であるため、すべてのデータに有効なエントリがあり、"Completed" フィールドに NULL はありません。「完了」チェックボックスをあらゆる方法でバインドしようとしましたが、常に同じ問題が発生します。

現在、これはプロジェクトの開始時であるため、検証コードやその他の実際のイベントはありませんが、チェックボックスを使用する必要があるため、ちょっと面倒です。

ここで私が間違っていることは誰にも分かりますか?

4

1 に答える 1

0

週末全体をこれにリッピングして過ごした後、解決策があります。

私のテスト中に判断できたのは、BindingNavigator でチェックボックスのあるフォームを使用している場合、BindingNavigator は「チェック」状態だけでなく、チェックボックスの「CheckState」を表示したいということです。

ここでの問題は、「CheckState」にバインドし、フィールドがブール値の場合、エラーが発生するため、フォーマット フラグを「True」に反転し、「nullValue」を「CheckState.Unchecked」に設定する必要があることです。

だから私のチェックボックスのバインディングは今..

Me.Completed.DataBindings.Add("CheckState", frmBindingSource, "Completed", True, DataSourceUpdateMode.OnValidation, CheckState.Unchecked)

上記を使用すると問題が解決します。

于 2013-01-07T13:27:18.707 に答える