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 はありません。「完了」チェックボックスをあらゆる方法でバインドしようとしましたが、常に同じ問題が発生します。
現在、これはプロジェクトの開始時であるため、検証コードやその他の実際のイベントはありませんが、チェックボックスを使用する必要があるため、ちょっと面倒です。
ここで私が間違っていることは誰にも分かりますか?