• 締切済み

DataGridViewで変更した値を反映させたい。

VB2005、SqlServer2005環境です。 デザイナ上で、DataTableをドラッグしてやると、自動的に バインドされたDataGridViewが出てくれるので、その方法で DataGridViewを1つ設置しました。 このDataGridViewの表の値を変えた時、それを実際のDBのテーブルにも 反映させたいなと思ってます。 これを実現するための方法を教えていただけないでしょうか? バインドされているので、保存できればそのまま更新されるような イメージなのですが…その方法がわかりません。 宜しくお願いします。

  • ginfix
  • お礼率34% (330/962)

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

ビューからだとUpdateやDeleteなど元のテーブル対する操作は自動生成されないようです フォームに張り付いているデータセットにクエリを追加して テーブルを操作できるようにします 表示されているテーブルアダプタをアクティブにして データ > 追加 > Queryを実行 SQLステートメントを使用するにチェック で次へ UPDATE で次へ ここで クエリビルダ もしくは 直接SQLを編集し『完了』をクリック フォームに更新用ボタンを配置 そのクリックイベントに dim row as DataRow for each row in DS.DaTable.Rows   if row.RowState = DRowState.Modified then     TableAdapter.UpdateQuery( Row("Name"), Row("ID") )   end if next といった具合で更新を掛けます # 変数名などは適宜修正してください # DS.DaTable.Rows、TableAdapter、Row("Name"), Row("ID")などです

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

データソースに設定したテーブルをドラッグアンドドロップして作成したのでしょうか? それならば フォームの上部にバインディングナビゲータが設定されていると思います ここのフロッピィーディスクのようなアイコンをクリックすると更新(または新規登録)の必要があるデータを更新するようにするためのスケルトンコードが作成されていますよ このアイコンをクリックしないとデータベースへの反映はなされません また作成したテーブルに主キーが設定されていない場合も更新がうまくいかない場合もあります スケルトンコードは   Private Sub MyTable04BindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyTable04BindingNavigatorSaveItem.Click     Me.Validate()     ' 編集中のセルの編集モードを終了させる     Me.MyTable04BindingSource.EndEdit()     ' テーブルアダプターのUpdateメソッドを使ってデータの更新     Me.MyTable04TableAdapter.Update(Me.SampleDBDS2.myTable04)   End Sub といった具合になっていると思います 上記の例では SampleDBSD2のmyTable04が対象になっています フォームクラス以外に VB2005が生成した SampleDBDS2というデータセットクラスがあります

ginfix
質問者

お礼

回答ありがとうございます。 仰るとおり、ボタンがありますが、更新が出来ない(ボタンを 押下できない)のです。 大事なことを書き忘れていたのですが、ドラッグしたのがビューでした。 この場合はグリッドの値をそのまま反映させるのは難しいでしょうか?

  • unamana19
  • ベストアンサー率62% (56/89)
回答No.2

http://msdn2.microsoft.com/ja-jp/library/xzb1zw3x(VS.80).aspx が参考になるのではないでしょうか?

ginfix
質問者

お礼

回答ありがとうございます。 参考にします。

  • sineminna
  • ベストアンサー率31% (118/370)
回答No.1

テーブルアダプタのUpdateメソッドを使用して更新します。 デザイナを使用して作成したオブジェクトにはテーブルアダプターが自動的にできていると思うので TableAdapter.update(Dataset.DataTable)

ginfix
質問者

お礼

回答ありがとうございます。 設置したのがビューだったので、うまくいかないようです。 大事なことを書き忘れていて申し訳ありません。

関連するQ&A

  • DataGridViewでの変更を即時反映させなくするには?

    VB2005でWindowsアプリを開発しています。 同じDataTableの内容を二つのDataGridViewに表示し、 変更前、変更後というように変更箇所がわかるようにしたいです。 そして、更新ボタンが押下されたら、DataGridViewの変更箇所をDataTableに反映させて、データ(XMLファイル)を更新する、ということをしたいのです。 デフォルトの状態では、DataGridViewを変更したら、DataTableが更新されるため、両方のDataGridViewが同じ表示になってしまいます。 ですので、DataGridViewを変更されても、DataTableには反映させないようにしたいのですが、可能でしょうか? よろしくお願いいたします。

  • VB2005 DataGridViewでの非バインド文字列のこと

    VB2005でDataGridViewを使ってプログラムをしているのですが。  DataTableとBiding(リンク?)しているDataGridViewで。 DataTableとバインドしてない項目X(非バインド列)をDataGridViewに新たに追加して。 例えば、DataTableの項目Yが1だと項目Xも1という風に表示させたいのですが。 一度目はうまく表示されるのですが。その画面を閉じてまた開いたら表示されないのですが。 どうしたら良いでしょうか?アドバイスをお願いします。 開発環境: XinXP Pro SQL Server2005 Express VS2005 Pro VB2005

  • DataGridViewで教えてください。

    DataGridViewで教えてください。 VB初心者ですが どうかよろしくお願いいたします。 VB2005で DataGirdView(dgv1)の始めの行を 他のDataGridView(dgv2)に追加したいのですが、 うまくいきません。 どうすればよいのでしょうか? すみませんが、 教えてください。 よろしくお願いします。 Dim Table As DataTable Dim MainTable As DataTable Dim row As DataRow Table = DirectCast(dgv1.DataSource, DataTable) MainTable = DirectCast(dgv2.DataSource, DataTable) row = MainTable.NewRow row = Table.Rows(0) MainTable.Rows.Add(row)

  • [C#] DataGridViewでコンボボックスでの変更がdataTableに反映されません

    DataGridViewへのコンボボックス利用で躓いております。 DataGridViewのAutoGenerateColumnsをfalseにし、dataGridView.DataSourceにデータベースから読み込んだデータテーブルを指定しています。 次にdataGridViewにDataGridViewComboBoxColumnを追加し、DataPropertyNameにコンボボックスに対応させたい データテーブルのCaptionを指定することで、データテーブルとコンボボックスを関連付けています。 実行後の表示は想定通りなのですが、コンボボックスでアイテムを選択するとdataGridView上では値が更新されて、データテーブルには変更が反映されていません。 ちなみにコンボボックスでは、ValueMemberとDisplayMemberを設定し、DataGridView上ではstring、 内部的にはlongでデータ管理を行いたいと思っています。 どうにも解決方法が見いだせないので、こちらに質問させていただきました。 ソースを貼りつけるのでご指摘をお願いします。 利用しているデータベース |ID|ペットID| |1 |1| |2 |1| |3 |3| 以下ソースでは上記データベースのデータテーブルをpdtとしています。 コンボボックスのデータテーブル作成 DataTable comboTable = new DataTable(); comboTable.Columns.Add("ID", typeof(long)); comboTable.Columns.Add("NAME", typeof(string)); string[,] rowDataArray =      {{"1", "犬"},      {"2", "猫"},      {"3", "魚"}}; for(i=0;i<rowDataArray.GetLength(0);i++) {    DataRow row = comboTable.NewRow();    row["ID"] = rowDataArray[i, 0];    row["NAME"] = rowDataArray[i, 1];    comboTable.Rows.Add(row); } comboTable.AcceptChanges(); //コンボボックスを作成しコンボボックステーブルをバインド DataGridViewComboBoxColumn cbc = new DataGridViewComboBoxColumn(); cbc.DataSource = comboTable; cbc.DisplayMember = "NAME"; cbc.ValueMember = "ID"; cbc.DataPropertyName = pdt.ペットIDColumn.Caption; cbc.DisplayStyleForCurrentCellOnly = true; //dataGridViewにデータテーブルをバインド dataGridView1.AutoGenerateColumns = false; dataGridView1.DataSource = pdt; dataGridView1.Columns.Add(cbc); これを実行すると |犬| |犬| |魚| とdataGridViewに表示され、コンボボックスでは、犬、猫、魚が選べます。 一行目において、コンボボックスから猫を選択するとdataGridViewは下記のようになるのですが |猫| |犬| |魚| この後ブレークよりデータテーブルとdataGridViewを見ると pdt[0][0] = 1 dataGridView1.Rows[0].Cells[0].Value = 2 となっており、dataGridViewの値は更新されているのに、データテーブルでは更新されていませんでした。 今まで、dataGridView上でダブルクリックし、値を直接書き換えていたらデータテーブルの値も更新されていたのですが、 コンボボックスを使うようにしたら更新されなくなりました。 皆様、解決方法を教えていただけますでしょうか。

  • VB.netのDataGridViewについて

    VB.netのDataGridViewについての質問です。 DataGridViewで出力された行を選択して、 その行の値をテキストボックスなどに出力させることは可能なのでしょうか? やりたいことは 1.データベースより取得してきたDatatableをDataGridViewに出力 2.出力されたDataGridViewの行を選択する 3.その選択された行の項目(複数)の値を画面上の個々の   テキストボックスなどに反映させる です

  • DataGridViewのカラムを、見た目だけ消したい。

    VB2005、SQLServer2005環境です。 DataGridViewに、DBから取得した値を表示させ、それを削除 できるようなプログラムを作っています。 DataGridViewの一番左側にキーとなるカラムがあるのですが、 それを見た目だけ消したいと考えています。 キー 名前 ---------------- 1 タロウ 2 ハナコ 3 ユウジ 例えば、このような表であれば、見た目に表示されるのは 名前だけで、削除時は内部的にキー列を参照したいのです。 Me.DataGridView1.Columns(0).Visible = False とすることで、とりあえずは消えたのですが、 Me.DataGridView1.CurrentRow.Cells(0).Value.ToString で値を見てみると、名前列の値が取れていました。 見ためだけ列を消す方法はないでしょうか? ご教授ください。

  • datagridview で昇順に

    vbを始めたばかりですが、 教えてください(2005) datagridview で大きい順にならべたいのですが、 Dim Table As DataTable = DirectCast(DataGridView2.DataSource, DataTable) Dim View As DataView = Table.DefaultView View.Sort = "A寸法" だと小さい順になってしまいます。 大きい順にするにはどうすればよいのでしょうか? よろしくお願いします。

  • C# dataGridViewの値だけクリア

    DataSorceにDataTableを指定したdataGridViewの行や列を消さずに表の中身の値だけクリアするにはどうしたらいいのでしょう。 DataTable.Clear()メソッドを使用したら列ヘッダーは残ったのですが、全ての行が行ヘッダーごと消えてしまいました。

  • DataGridViewで表示に制限をつけたい。

    VB2005、SQLServer2005環境です。 DataGridでDBのレコードを表示しています。 フォームのデザイナに、データソースに表示されている テーブルをドラッグしただけでなので、現在は以下のように なってます。 Private Sub TestForm_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Me.testTableAdapter.Fill(Me.DataSet.test) End Sub レコードが少なければ問題ないのですが、10万や20万と増えて くると、これでは表示に時間がかかります。 (実際には数百程度しかデータは入らないのですが)。 DataGridViewに表示するレコードの数を200件程度にして、それ以上は スクロールさせた時に表示するような形式にしたいと思うのですが、 それを実現するための方法を教えていただけないでしょうか? できましたら、サンプルコードを交えて教えていただけると助かります。 宜しくお願いします。

  • DataGridViewの内容をDBに反映する時

    VB2005で開発をしています、DataGridViewの事について質問させていただきます。 DataGridViewに入力されたデータを、登録ボタン押下によってDBに反映したいのですが、 この際どのようにDBへ登録すれば効率がいいでしょうか? 今は、DataGridViewの1行目を読み込んでDBに登録、 2行目を登録・・・・最終行を登録という感じで、1行ずつ登録を行おうかと考えています。 よろしければご教授お願いいたします。

専門家に質問してみよう