C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Datagridviewの内容を退避したい

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■100542 / inTopicNo.1)  Datagridviewの内容を退避したい
  
□投稿者/ エネループ (1回)-(2022/09/09(Fri) 10:41:10)

分類:[VB.NET/VB2005 以降] 

VB.NETのWindows Forms アプリをVisualstudio2019を使用しています。

Datagridviewの内容を退避したいのですが、どういった方法がありますでしょうか。
RowとCoulumの数を元にFor文で回して一つずつ退避する方法があるとは思いますが、
少ない記述で実行する方法を知りたいです。

DataTableの内容をDatagridviewへバインド、表示させるのは可能というのは分かるのですが、
その逆でDatagridviewの内容をDataTableなどは可能なのでしょうか。

よろしくお願いします。
引用返信 編集キー/
■100543 / inTopicNo.2)  Re[1]: Datagridviewの内容を退避したい
□投稿者/ WebSurfer (2556回)-(2022/09/09(Fri) 12:39:52)
No100542 (エネループ さん) に返信

現状どのような構成になっているのか書いてないのでわかりませんが(ちゃんと書き
ましょうね)・・・

> DataTableの内容をDatagridviewへバインド、表示させるのは可能というのは分かるのですが、

そこはちゃんとわかっていて、以下のような構成にしているなら、

DataGridview ⇔ BindingSource ⇔ DataSet / DataTable

> その逆でDatagridviewの内容をDataTableなどは可能なのでしょうか。

可能です。「ユーザーが DataGridView を編集した結果は DataSet / DataTable に
反映されます。

以下の記事の「非接続型のデータ更新」のセクションの図1と図2を見てください。
文章は読まなくてもいいので図だけ見てください。

DB 設計者のための明解 ADO.NET 第 1 回
https://docs.microsoft.com/ja-jp/previous-versions/cc482903%28v=msdn.10%29

図2の DataSet (中に DataTable がある) の右側に BindingSource 経由で DataGridView
が接続されていると思ってください。

ユーザーが DataGridView を操作(行の削除・追加・訂正)した結果は図1にあるように
DataSet / DataTable に反映されます。

上に紹介した記事はデータソースが SQL Server の場合で、そのようなアプリはデータ
ソース構成ウィザードを使ってドラッグ&ドロップ操作だけで簡単に作れます。以下の
記事を見てください。

Add new data sources
https://docs.microsoft.com/ja-jp/visualstudio/data-tools/add-new-data-sources?view=vs-2022

データソースが CSV ファイルのような場合も同様です。具体例は以下の記事を見てく
ださい。

CSV ファイルを DataGridView に表示
http://surferonwww.info/BlogEngine/post/2020/09/11/show-date-in-csv-file-on-datagridview.aspx


引用返信 編集キー/
■100544 / inTopicNo.3)  Re[1]: Datagridviewの内容を退避したい
□投稿者/ radian (94回)-(2022/09/09(Fri) 17:42:59)
No100542 (エネループ さん) に返信
> DataTableの内容をDatagridviewへバインド、表示させるのは可能というのは分かるのですが、
> その逆でDatagridviewの内容をDataTableなどは可能なのでしょうか。

DataTableをバインドしてあるなら、特に何もせずとも
DataGridViewでの編集結果はDataTableに反映されていると思いますが。
引用返信 編集キー/
■100545 / inTopicNo.4)  Re[1]: Datagridviewの内容を退避したい
□投稿者/ 魔界の仮面弁士 (3454回)-(2022/09/09(Fri) 19:23:38)
No100542 (エネループ さん) に返信
> その逆でDatagridviewの内容をDataTableなどは可能なのでしょうか。

radian さんが書かれているように、DataTable の内容も
連動して一緒に書き換えられているはずです。

DataGridView の DataSource に渡した DataTable 型の変数の中身を、
編集後に読み取ってみてください。


さらに加えて言えば、DataGridView で編集された後の DataTable 内は、
それぞれの行(DataRow) に対して、RowState プロパティによって
 「何も変更されていない行」
 「変更された行」
 「元は存在しなかったが、新たに追加された行」
 「削除された行」
のいずれの状態であるかが保持されています。

また、DataTable は編集前の値と編集後の値の両方を保持しています。

変更された行なら「変更される前の最初の値」と「変更された後の値」の両方を保持していますし、
削除行なら、削除される前の値だけを保持しています。
新規行なら、変更前の値は無いので現在値のみを保持しています。

こうした、変更前の値と変更後の値のそれぞれにアクセスする必要がある場合には、
DataRow のインデクサ(Items プロパティ)の第二引数を指定するようにします。
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datarow.item?view=netframework-4.8


この機能があるため、DataAdapter を使った場合に、データベースに対して
 UPDATE テーブル
 SET 列 = <変更後の値>
 WHERE 列 = <変更前の値>
のような更新処理(あるいは削除や追加処理)を行うことができるようになっているわけです。


修正前と修正後の両方の値が保持されているのですから、わざわざ
> Datagridviewの内容を退避したいのですが、
などとする必要はないという事です。
DataSouce に渡した DataTable のインスタンスを保持しておくだけで良いと思いますよ。

あるいは、退避というのがファイルへの保存といった意味であるのなら、
DataSet や DataTable の WriteXml メソッドを用いて、
現在の DataTable の内容をファイルに保存しておくことができます。
引用返信 編集キー/
■100546 / inTopicNo.5)  Re[1]: Datagridviewの内容を退避したい
□投稿者/ WebSurfer (2557回)-(2022/09/10(Sat) 09:52:47)
No100542 (エネループ さん) に返信

No100543 でデータソースを CSV ファイルにした記事を紹介しましたが、CSV
に代えて XML にする場合の記事も紹介しておきます。

XML ファイルを DataGridView に表示
http://surferonwww.info/BlogEngine/post/2019/04/26/show-content-of-xml-file-on-datagridview.aspx
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ