2011-02-09 23 views
1

DataSet Designerを使用して、SQLTextpressデータベースからAlarmTextテーブルを保持するFTWDataSetを作成しました。これまでの私のフォームはDatagridview1のみを含んでいます。以下のコードは、AlarmTextテーブルの内容とチェックボックスの列を追加したものです(これは表示専用のデータで設定されますが、ここで問題にはなりません)。変更されたデータテーブルからSQLテーブルを更新するにはどうすればよいですか?

Dim ta As New FTWDataSetTableAdapters.AlarmTextTableAdapter 
    Dim dt As New FTWDataSet.AlarmTextDataTable 
    ta.Fill(dt) 
    DataGridView1.DataSource = dt 

    'create a new Bool column in the datatable 
    dt.Columns.Add("NewCol", (New Boolean).GetType) 

DataGridViewを使用してAlarmTextテーブルの値を編集および保存するには、他に何が必要ですか?

答えて

0

ここでは、このトピックの簡略MSDN walkthroughです。

いくつかの注意は:

  • あなたは戻って変更をデータベースに永続化するバインディングソースを必要はありません。
  • フォーム内の他のプロシージャからテーブルアダプタにアクセスできるようにするには、例のように、メソッドスコープではなくフォームスコープの(メンバー名)変数にします。
  • データセットデザイナを使用してDatasetを作成し、単純なテーブルやビュー以上の元のデータを取得している場合、アダプタは元のデータベースのデータを更新する方法を知らないでしょう。この状況では、UPDATEコマンドを手動で設定する必要があります。参考までに、上記のリンクのTableAdapter Update Commandsセクションを参照してください。

私はまた、ペストのようなADO.NetのTableAdaptersを避ける必要があることを言及する必要があります。理論的には非常に便利で強力です。実際には、それらの多く(特にOracleプロバイダ用のもの)はバグがあり、正しく動作しない場合は完全に戸惑います。

基本的なテーブルを1つだけ抜いている場合は、アダプタが正常に動作するはずです(当分の間、私の虚偽のアドバイスは無視されます)。コードに追加の列を追加すると、データベーステーブルに対応する列がないため、アダプタが壊れることがあります。

+0

はい、私はテーブルアダプターとバインディングソースが関係すると考えました。しかし、私はバインディングソースを持っていないし、私が示したコード(ロードイベント)で参照されているテーブルアダプタは、他のプロシージャからアクセスすることはできません。 – John

+0

私はdim taをNewとして移動しました。 。 。ステートメントをフォームのPublic Classステートメントのすぐ下に置きます。また、DataSet1というDataSetコンポーネントを追加しました。これは、Designerで作成したデータセットへの参照をフォームに追加したものです。次に、DataGridView Validatedイベントにta.Update(Me.DataSet1.AlarmText)を追加しました。それはすべて実行されますが、何も救われていません。 Validatedイベントは確実に発生しています。これまでのご協力ありがとうございます。 。 。 – John

+0

また、ta.Update(Me.DataSet1.AlarmText)をグリッドのCellValueChangedイベントに移動しました。まだ保存していません。 – John

関連する問題