- ベストアンサー
DataGridViewでの変更保存
初めて投稿します。 VisualBasic2005、SQL Server2005 EXPRESSで開発を行っております。 初心者なので簡単な内容なのでしょうが、糸口がつかめず思考がストップしています。 DataGridViewに1つのテーブルをバインディングでドラッグアンドドロップし、IDで紐付く別テーブルの名称を1カラム追加しています。 DataGridView上でIDを変更し、それに合わせて名称が変更されます。 変更後の状態をBindingNavigatorの保存ボタンで保存をしたいのですが、次にフォームを開いても変更が反映されていません。 検索結果にも同様の質問と回答があったので試みましたが解決しておりません。 因みにコードは以下です。 Private Sub T_payscheduleBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T_payscheduleBindingNavigatorSaveItem.Click Try "テーブル名"TableAdapter.Update(MoPDataSet.テーブル名) Catch ex As Exception End Try End Sub 長くなりましたがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
そうなると、#1さんが仰るように、主キーの問題のような気がします。以下は、DataSet内でTableAdapterを追加して使っている事を前提にしています。DataSetのTableAdapter作成は、次のような癖を持っています。 ・主キーを持つDataBaseのTableのTableAdapterを追加した場合、初回作成時には、Updateコマンドが自動で追加されます。 ・主キーを持たないDataBaseの場合、UpdateコマンドをTableAdapterに手動で追加する必要があります。 ・途中から主キーを持たせても、その変更は自動で反映されません。手動で追加します。 ただし手動追加のUpdateコマンドでは、Update(MoPDataSet.テーブル名)タイプのコマンドを作れません(コードを書けば別ですが)。なので一番早いのは、主キーを持たせたのち、該当TableAdapterをいったん削除して、もう一度作り直す事です。 Tableのドラッグアンドドロップ時にはDataBaseに主キーがなく、その時にTableAdapterが、DataSet内に自動生成されたのでは?、と想像しています。 もう一つの可能性は、そのDataGridViewは、選択QueryTableになっています。開発環境が勝手に解釈して、DataSet内に選択QueryTableを生成した可能性もあると思います。選択QueryTableは、Updateできなかったと思います。
その他の回答 (2)
DataSetはご使用でしょうか?。もしそうなら、「出力ディレクトリにコピー」のプロパティーが「常にコピーする」になっていないでしょうか?。 違うかも知れませんが、初めてDataSetを使ったとき、半日ほど悩んだもので・・・。 あと、「Catch ex As Exception」はやめた方が・・・、と思います。Try~Catchブロックを使うなら、もっと細かく場合わけしないと、不要にデバックが面倒くさくなる気がします。大きなお世話ですが・・・。
お礼
ご返答ありがとうございます。 DataSetは使用しています。元々、セーブボタンを押しても名何の反応もなかったので、再度フォームを作り直してみました。 そうすると、セーブボタンを押下したらBindingNavigatorで自動で作成されるソースで動作するようにはなったのですが、今度は”Me.テーブル名TableAdapter.Update(Me.MoPDataSet.テーブル名)”の所で下記のエラーが表示されるようになってしまいました。 ”更新には、変更された行を含む DataRow コレクションが渡されたとき、有効な UpdateCommand が必要です。” 何をどう調べればよいのかを調べている状態です。 情報をお持ちでしたらよろしくお願いします。
- redfox63
- ベストアンサー率71% (1325/1856)
作成したSQLサーバのテーブルに主キーは設定したあるのでしょうか 主キーの設定がなされていないとうまく更新をUpdateメソッドで出来ない場合があるようですが ・・・
お礼
早速ご返信いただきありがとうございます。 主キーの情報も調査途中で見つけたので、主キーを追加しテストしてみましたが状況は変わりませんでした。
お礼
ご回答ありがとうございます。 TableAdapterを再作成したら保存が効くようになりました!! 開発開始の段階でこの状態なので、また行き詰りましたら質問を投稿させていただきます。 ddtddtddtさんはじめ、回答をいただいた皆様ありがとうございました。