- ベストアンサー
VB2010 DataGridVie CSV読込
- VB2010で出勤簿を作成し、DataGridviewで表示する方法です。
- 出勤簿のデータをCSV形式で保存し、別のPCでも使用できるようにする方法について教えてください。
- CSVファイルを読み込む際に、コントロールがデータバインドされている場合にエラーが発生する対処方法を知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 素人考えでCSV形式で保存して XMLに一発変換でしょ DataSet.ReadXml(filename) DataSet.WriteXml(filename)
その他の回答 (2)
- MSZ006
- ベストアンサー率38% (390/1011)
#1です。 詳しくは分からないのですが、CSVを書き出しているほうのDATATABLEの列(NO)の型定義と、読み込んでいるほうのそれと一致していないのではないでしょうか? なお、他の回答者さまのおっしゃるとおり、XMLで書き出して読み込めば悩むことは少ないと思います。 いずれにせよ、書き出し側と読み込み側で列の型を一致させておく必要があります。
お礼
ご教授をありがとうございました。 CSVで保存するのは簡単ですが、保存されたものを書き出すのは列の型定義の一致という作業が入り難しかったです。 一致させてもDataGridViewに表示されるだけで、Datasetに保存されないので、そのあたりの改良も必要と感じいました。 ご指摘のように、XMLで保存・書き出しをすることに致します。 お時間を頂、感謝しています。
- MSZ006
- ベストアンサー率38% (390/1011)
DataGridView1にソースデータ(出勤簿)がバインドされているのだと思いますので、DataGridView1に直接行を追加ではなくて元データ(出勤簿)のほうに追加をしていくべきではないでしょうか?
補足
ご教授をありがとうございます。 早速、下記のように訂正しましたところ、 ' 読み込んだデータ(1行をDataset11.出勤簿に表示する) Me.DataSet11.出勤簿.Rows.Add(row) エラーが次のように出ました。 「入力文字列の形式が正しくありません。列 NO に <NO> を格納できませんでした。 必要な型は Int32 です。」 NOは、IntでしたがInt32というようにエラーがでまして、わからなくなりました。 もう少し、ご教授ください。 すみません。
お礼
XMLを全く分からないので、無駄な質問をいたしましてすみませんでした。 既に、回答を簡潔に頂いていたのに、気付かないで遠回りをしていました。 DataSet.WriteXml("kyoto.xml") と書くと簡単に保存できました。 DataSet.ReadXml("kyoto.xml") の場合は、少し手間取りましたが、これを書く前にDatasetを初期化しますとエラーが出なくなりました。 xmlからDatasetに読み込みができます。 少しだけ、XMLが分かりました。 感謝いたします。
補足
XMLを使うのは、初めてなのでいろいろ参考にしながら、DataSet.ReadXml(filename)ではありませんが、次のようなコードを書きました。 プログラムを実行させますと、エラーもなく作動しました。でも、保存先がどこかわかりませんし、実際に保存されているのかも判りませんので、ファイル名を「kyoto.xml」として書き直しました。 'XMLで保存 Dim dtSet As DataSet = New DataSet("出勤簿") Dim dtTbl As DataTable = dtSet.Tables.Add("DATA") dtTbl.Columns.Add("NO", Type.GetType("System.String")) dtTbl.Columns.Add("社員名", Type.GetType("System.String")) dtTbl.Columns.Add("日付", Type.GetType("System.String")) dtTbl.Columns.Add("出勤", Type.GetType("System.String")) dtTbl.Columns.Add("欠勤", Type.GetType("System.String")) dtTbl.Columns.Add("有給", Type.GetType("System.String")) 'データセットにデータを構築 Dim row As DataRow Dim i As Integer For i = 1 To DataGridView1.Rows.Count - 1 row = dtTbl.NewRow() row("NO") = i.ToString() row("社員名") = i.ToString() row("日付") = i.ToString() row("出勤") = i.ToString() row("欠勤") = i.ToString() row("有給") = i.ToString() dtTbl.Rows.Add(row) Next 'DataSet内のデータのXML表現を取得 Console.WriteLine(dtSet.GetXml()) 最後の行の「 Console.WriteLine(dtSet.GetXml())」を 「 Console.WriteLine(dtSet.GetXml(”kyoto.xml”))」に変更しましたが、 エラーメッセージが次のように出ます。 「String "kozo.xml" から型 'Integer' への変換は無効です」 これは、どのように対応すればよろしいでしょうか。 また、使いよいDataSet.ReadXmlの参考書がございましたら、お教えください。 ご教授のほどを宜しくお願い申し上げます。