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

このQ&Aのポイント
  • VB2005でWindowsアプリを開発しています。同じDataTableの内容を二つのDataGridViewに表示し、変更箇所がわかるようにしたいです。
  • 更新ボタンが押下されたら、DataGridViewの変更箇所をDataTableに反映させて、データ(XMLファイル)を更新する、ということをしたいのです。
  • DataGridViewを変更されても、DataTableには反映させないようにする方法はありますか?
回答を見る
  • ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • qtea
  • ベストアンサー率77% (38/49)
回答No.1

DataTableのCopyメソッドを利用してはいかがでしょうか? または、DataGridViewへの値は自前(?)で設定するという手もあります。(DataGridView1.Columns.Add,DataGridView1.Rows.Add) あと、Copyしてなければ、DataTableの変更箇所は、GetChangesメソッド、または、DataRowのRowStateプロパティでわかると思います。 なので、片方のDataGridViewだけDataSourceはCopyで済ませたほうが、楽なのかもしれません。 ※GetChangesメソッドまたは、RowStateを利用する場合は、DataTableのAcceptChangesメソッドあたりをHelpで読んでみてください。

sunasaka3
質問者

お礼

やはり、即反映されてしまうものなのですね。 片方はcopyを使う方法でやっていくことにします。 ありがとうございました!

関連するQ&A

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

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

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

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

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

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

  • DataGridViewで再表示すると変更不可にならない

    Visual Basic 2008 にて開発していますがDataGridViewについて質問させて下さい。 DataGridViewのデータ表示は、検索結果をDataTableに格納し、 そのDataTableをDataSourceに設定する方法で行っています。 DataGridView内にはチェックボックスがあり、 そのチェックボックスは条件によってReadOnly = Trueにて変更不可にして表示しています。 最初の表示は問題なく条件に合えば ReadOnly = Trueにて変更不可になり表示してくれますが、 再表示(DataTableをDataSourceに再代入)すると条件に合っているのにReadOnly = Trueが効かず、 チェックボックスが変更可能となって表示してしまいます。 ReadOnly=True にする方法は、DataGridView の件数を取得し、 jjCnt = 0 Do Until jjCnt >= ggCnt   If DataGridView1.Rows(jjCnt).Cells(88).Value.ToString() = "1" Then DataGridView1.Rows(jjCnt).Cells(0).ReadOnly = True End If jjCnt = jjCnt + 1 Loop で行っています。 何故、再表示だと変更不可にならないのか解らずご教授願いたく宜しくお願い致します。

  • DataSetの内容がDataGridViewに反映されない

    現在、VB2005でアプリケーションの開発をしているのですが DataSetの内容がDataGridViewに反映されなくて困っています。 表示させたいデータをデータセットにとってくるところは問題ないようで 1回目は上手く表示されるのですが、データセットの中身を変更して セットし直しても表示が変わりません。 以下がソースを抜き出したものになります。 Grid.DataSource = Nothing Grid.DataMember = Nothing Grid.DataSource = DataSet Grid.DataMember = "M_kbn" よろしくお願いします。

  • vb.net datagridviewの列位置変更

    vb.net datagridviewの列位置を変更する方法を教えて下さい。 データグリッドビューにDataTable(DBから抽出したデータ)を割り当てました。 DataGridView1.DataSource = DataTable1 ここに、カラムを追加しました Dim column As New DataGridViewButtonColumn() '列の名前を設定 column.Name = "Button" '全てのボタンに"詳細閲覧"と表示する column.UseColumnTextForButtonValue = True column.Text = "詳細閲覧" 'DataGridViewに追加する DataGridView1.Columns.Add(column) この追加したカラムを一番左に表示したいです。

  • VB.netのDataGridViewについて

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

  • DataGridViewの内容を他のページに反映させたい

    お世話になります。 VS2005のC#.netで開発しているシステムなのですが、 Accessを利用してDataGridViewの内容を表示させているのですが、 それを他のFormのTextBoxに反映させたいのです。 SelectRowsなどを打ってみてもエラーが出たり、 内容は反映されずにメッセージボックスが出たりしてしまいます。 DataGridViewの内容を他のページに反映させたい場合はどうすれば よろしいのでしょうか?

  • DataGridViewの入力内容をリアルタイムでTextBoxにコピーしたい

    よろしくお願いします。 Vb2005+Access2003でWindowsアプリケーションを開発しています。 表題のとおりなんですが、DataGridViewの2列目にあるセルにテキストを入力したら、その入力中のテキストをTextBoxにも反映させたいと考えているのですが、そういったことはできるのでしょうか?方法がありましたら、教えてください。もしできなければ、エンターキーを押したらTextBoxに反映する、という方法でも良いと考えています。 キーボードから入力された内容をDataGridViewとTextBoxの二つのコントロールに同時に表示するということができるのかわからないので、変な質問をしてたらすみません!色々と調べてみたのですがよくわからないので投稿させていただきました。どうぞよろしくお願いします。

  • [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上でダブルクリックし、値を直接書き換えていたらデータテーブルの値も更新されていたのですが、 コンボボックスを使うようにしたら更新されなくなりました。 皆様、解決方法を教えていただけますでしょうか。

専門家に質問してみよう