これは氏jmcilhinneyが他のいくつかのノートや観察と一緒に(コメント欄に記載したものです):
' form level vars we need:
Private bsSample As BindingSource
Private dtSample As DataTable
Private ACEConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0...YOUR CONN STRING..."
は、次にデータをロード:
Dim sql = "SELECT Id, Name, Descr, ValueA, Fish, Bird, Color, Active FROM Sample"
Using dbcon As New OleDbConnection(ACEConnStr)
Using cmd As New OleDbCommand(sql, dbcon)
dbcon.Open()
dtSample = New DataTable
dtSample.Load(cmd.ExecuteReader)
End Using
End Using
- あなただけの1台で作業している場合は、テーブルを格納するデータセットを必要としません。
- 示されているように、特にローカルでのみ使用している場合は、テーブルを埋めるためにDataAdapterは必要ありません。あなたは簡単にテーブルに変更を加えること(DTまたはのBindingSourceなど)フォームレベル1にしたいことがあります。
myDa.Update(dtSample)
- あなたは
DataTable
を通してデータを追加したり、DataGridView
でデータを表示することを計画している場合、それが指定することができますSQLではカラム順ではなくSELECT *
- これはAccessではあまり真実ではありませんが、Connectionオブジェクトを開いて使用してから処分する必要があります。 1つの紛失
con.Close
ステートメントは、さまざまなエラーを引き起こす可能性があります。ブロックを使用して、リソースを解放するために最後のものを閉じて処理します。あなたはすべての顧客のDataTable
を持っている場合
も注意してください、あなたは#30が、前の質問ごとに削除する前に存在しているかどうかを確認するためにを使用することができることを。バインディング:
' initialize BS from DT
bsSample = New BindingSource(dtSample, Nothing)
tbName.DataBindings.Add("Text", bsSample, "Name")
tbDescr.DataBindings.Add("Text", bsSample, "Descr")
chkActive.DataBindings.Add("Checked", bsSample, "Active")
最初の行はBindingSource
を初期化します。最後の部分は "マッピング"を設定します。たとえば、テキストプロパティtbName
は、bsSample
ソースからの "名前" DBデータを表示するように設定されています。 CheckBox
にはChecked
プロパティとしてActive
データ(bool)が表示されます。
BindingSourceには、使用できるすべてのメソッドとプロパティがあります。あなたの[次へ]ボタン:ユーザーがコントロールに変わり
Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
bsSample.MoveNext()
btnNext.Enabled = (bsSample.Count - 1 > bsSample.Position)
' To Do: add similar code for btnPrev
End Sub
注DataTable
ではなく、データベースに適用されます。ユーザーがこの方法を編集できるようにしたくない場合は、簡単な方法はDataView
を使用することです:
Dim dv = New DataView(dtSample)
dv.AllowEdit = False
bsSample = New BindingSource(dv, Nothing)
また、フィールドごとにソースへの更新を無効にすることができます
tbName.DataBindings.Add("Text", bsSample, "Name", False, DataSourceUpdateMode.Never)
を
は、おそらく最も簡単なのは次のとおりです。
dgv.ReadOnly = True
dgv.DataSource = dtSample
がフォームにDataGridViewのをドロップし、あなたにDataSource
を設定してください。それが使い方が簡単です。あまりにも多くの人が不必要にそれを恐れています。
これは、DataAdapterを通じてDataTableの任意の数の行を一度に追加、削除、更新することです。これを行うように設定するには、数行のコードが必要ですが、驚くほど少ない数です。
なぜボタンを無効にすることができたら、[次へ]ボタンをクリックしてエラーを表示するのはなぜですか?予防は治療よりも常に良いです。また、すべてのコードを取り除き、代わりにデータバインディングを使用する必要があります。あなたの 'DataTable'を' BindingSource'にバインドし、それをコントロールにバインドします。次に、 'BindingSource'で' MovePrevious'または 'MoveNext'を呼び出すだけでナビゲートできます。 – jmcilhinney
さて、エラーはテーブルの最後の行にのみ表示されるので、10行が得られたとしましょう。10行目になったときにエラーを表示し、次にもう一度ヒットするとエラーが表示されます。 –
あなたは悪いソフトウェアをデザインしたいと思っています。私はそれを奨励することを望んでいません。私はあなたが良いソフトウェアを書くことを決定したときに助けに戻ってきます。 – jmcilhinney