• 締切済み

[非SQL]Datagridviewでのファイル読み書き

いつもお世話になっております。 SQLを用いずにDatagridviewでデータを読み込み,書き込みする方法を教えていただきたく,質問させていただきました。 現在,txtファイル,あるいはcsvファイルを読み込み,Datagridviewを用いてデータ表示し,レコードの内容を変更し,書き込みを行えるようなプログラムを考えております。 イメージとしては,次のような感じです。 |ヘッダ1|ヘッダ2|コンボボックス| |AAAAA|aaaaa|項目1~3| |BBBBB|bbbbb|項目1~3| 環境:vb2005 ExpressEdition まだプログラミングを始めたばかりという事もあり,右も左もわかりませんが,ご教授お願い致します。

みんなの回答

noname#259269
noname#259269
回答No.3

おおまかには、次のような手順になると思います。 1.DataGridView のデザイン定義 2.ファイルを読み込んで、DataTable を作成(1.のデザインと対応づける) 3.DataGridView に DataTable をバインド 4.(DataGridView 上での値の変更操作が、DataTable に自動反映される) 5.[保存]ボタンの押下タイミングなどで、DataTable の内容を元のファイル名で書き出す --- 以下は、3,4,5のサンプルです(話を単純化する為 ComboBox にはしていません)。5.は単に MsgBox 表示にとどめています。先は長いですが、がんばってみてください。 Public Class Form1 Dim _dt As DataTable Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'DataTable を作成(データの器を作成) _dt = New DataTable _dt.Columns.Add("Column1") 'デザイン画面で設定した列の _dt.Columns.Add("Column2") 'DataPropertyName に対応した _dt.Columns.Add("Column3") '名前を、DataTable の列に指定 '本サンプルでは、AutoGenerateColumns = True にしているが '実際にはデザイン画面で列定義するので False になる Me.DataGridView1.AutoGenerateColumns = True '実際はファイルから読み込んで DataTable に格納していく Dim dr As DataRow = Nothing dr = _dt.NewRow dr.ItemArray = New String() {"AAAAA", "aaaaa", "1"} _dt.Rows.Add(dr) dr = _dt.NewRow dr.ItemArray = New String() {"BBBBB", "bbbbb", "1"} _dt.Rows.Add(dr) 'バインドする Me.DataGridView1.DataSource = _dt End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'ボタンを押した時に DataTable の中身を表示 Dim text As String = String.Empty For Each dr As DataRow In _dt.Rows For i As Integer = 0 To dr.ItemArray.Length - 1 text += dr.ItemArray(i).ToString + " " Next text += vbNewLine Next MsgBox(text) End Sub End Class

akira-mow
質問者

お礼

edp3142様 操作したい内容の明確化,また,サンプルソースを示していただきありがとうございます。 平日は仕事の為,休みの日に眺めてみたいと思います。 再度質問させていただく事になるかもしれませんが,1つよろしくお願い致します。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

#1です。 お礼で >csvファイルとシーシャルファイルとは同語でしょうか それも含めて、今の時代はWEB(例Google)で照会すれば、ここの質問コーナーなど全く及ばないだけの記事が出ますので、調べてください。 検索語がわかれば、この質問そのものも早やくも出てきたり、このOKWAVEの過去の質問・回答も沢山出てきます。 それを読んでもわからない点などに絞って質問するのが、この質問コーナーの存在価値です。量や内容(?)では、このコーナーは太刀打ちできません。 まずそれを私は言いたい。

akira-mow
質問者

お礼

imogasi様 迅速,且つ,度重なる質問に回答いただきありがとうございます。 質問を行う前に,googleで,シーシャルと入力し検索をかけたのですが(39件該当),先の質問で回答いただいたような内容に関するものがみつからなかった為,質問させていただきました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

>非SQL なんて、こんな言葉無いと思うよ。SQLを使わない(使えない)というだけのことでしょう。 >txtファイル,あるいはcsvファイルを読み込み >レコードの内容を変更し,書き込みを行えるような ファイル編成のこと勉強して無いのでは。シーシャルファイルは、レコードのフィールドの更新ということは出来なくて、新しいファイルの書き出しになる。当然別名(別フォダでよければ、同名もあり)になるが、その後そのファイルの利用もあるだろうから、どうするのか(どんどん同一ファイル的なものが増える)そういうことも勉強して考えましたか。 そしてこの件課題の丸投げで、このコーナーでは違反の部類です。 WEBにはVB.NET系のテキストファイルのコード例など、多数載ってます。それらを調べてください。 「.NET streamreader」などで照会。(以下最初に出たもの) http://dobon.net/vb/dotnet/file/writefile.html 「.NET streamwriter」などで照会。 http://www.atmarkit.co.jp/fdotnet/dotnettips/036fileread/fileread.html あと 「Datagridview」で照会。

akira-mow
質問者

お礼

imogasi様 早速回答いただきありがとうございます。 まず,今回の質問の件ですが,丸投げととられる書き方をしてしまい,申し訳ありませんでした。 >>非SQL >なんて、こんな言葉無いと思うよ。SQLを使わない(使えない)という>だけのことでしょう。 ご指摘の通り,SQLを使わないケースを指しております。 >ファイル編成のこと勉強して無いのでは。 勉強しておりませんでした。 >シーシャルファイルは、レコードのフィールドの更新ということは出 >来なくて、新しいファイルの書き出しになる。当然別名(別フォダで >よければ、同名もあり)になるが、その後そのファイルの利用もある >だろうから、どうするのか(どんどん同一ファイル的なものが増え >る)そういうことも勉強して考えましたか。 質問ばかりで申し訳ありません。 csvファイルとシーシャルファイルとは同語でしょうか,それとも何かの状態を保持したファイル全般の事を指すのでしょうか。 参考サイトの紹介ありがとうございます。

関連するQ&A

  • DataGridView

    初めて質問させて頂きます。 最近VB2005を始めたばかりの初心者ですので、くだらない質問だったら、スミマセン。 VB2005でDataGridViewを使ってSQLサーバーのテーブル内容を表示させています。 その中で日時を表示させる項目(セル)がありますが、0:00の場合に時刻部分がデータセットへ読み込みされません。 良い対処方法を知っていたら教えて下さい。 よろしくお願いします。

  • DataGridViewのデーターをExcelに

    VB.Net初心者です。 フォームにDataGridViewを貼り付け、それにデーターを表示しています。 そのデーターを 全てCsvFileに保管する方法は判ったのですが・・・ Me.稟議処理作成者_STDataGridView.ClipboardCopyMode = _ DataGridViewClipboardCopyMode.EnableWithAutoHeaderText 'ヘッダーをコピーする CsvFileSave("\\Ws55\日東電工\データー引渡し用ファイル\Test2.csv") このDataGridViewの全てのデーターを指定したFile名でExcelFileに書込み、その後、そのExcelFileを立ち上げたいのですが、どうしたらいいのでしょうか。 ご存知の方教えてください。

  • sql*loader 数値のロード

    SQL*LOADERにて NUMBER(3,0)のフィールドに、小数点以下を含む数値をもったデータをロードすると 四捨五入か何かされて整数でデータがロードされてしまいます。 テーブル、CTLファイル、csvレコード、登録結果は以下のとおりです。 テーブル: CREATE TABLE tbl1 ( CLM001 NUMBER(3,0) NOT NULL, CLM002 VARCHAR2(30) ) CTLファイル: LOAD DATA INFILE 'tbl1.csv' BADFILE 'tbl1.bad' TRUNCATE INTO TABLE tbl1 FIELDS TERMINATED BY ',' TRAILING NULLCOLS ( CLM001, CLM002 ) csvレコード: 0.9,aaaaa 3.1,bbbbb 登録結果(SQL*LOADER実行結果): 1,aaaaa 3,bbbbb 小数点を含むデータをロード時にエラーとしたいのですが、何かいい方法ありますでしょうか? 環境はSQL*Loader: Release 9.2.0.1.0になります。

  • C# datagridview

    いくつかこまごまとしたものをまとめてご質問させて頂きますが, 1)csvファイルを読込,ある処理を行おうとすると 「列の FillWeight 値の合計が 65535 を超えることはできません。」 というエラーが出て処理が出来ません.このエラーの解消法を教えて頂けないでしょうか? 2)画像のように読み込んだヘッダー部分が文字化けしてしまいます. こちらの解消法をご教授頂けないでしょうか? 3)csvのすべてのデータをdatagridviewに表示させたいのですが,2列分しか表示されません. 下記に2)とも関連したプログラムを記載いたします.どなたかご教授願えないでしょうか? string strName = "xxx.csv"; // 仮のファイル名 string strPath = "c:/csv/"; // 仮のディレクトリ名 OpenFileDialog sfd = new OpenFileDialog(); sfd.InitialDirectory = strPath; sfd.FileName = strName; sfd.Filter = "CSVファイル(*.csv)|*.csv|xlsファイル(*.xls)|*.xls|xlsxファイル(*.xlsx)|*.xlsx|テキスト(*.txt)|*.txt"; sfd.Title = "開くファイルを選択してください"; sfd.RestoreDirectory = true; sfd.CheckFileExists = false; if (sfd.ShowDialog() == DialogResult.OK) { // CSVファイルオープン System.IO.StreamReader sw = new System.IO.StreamReader(sfd.FileName); // CSVファイルの各セルをDataGridViewに表示 int r = 0; String lin = ""; do { lin = sw.ReadLine(); if (lin != null) { if (r == 0) { dataGridView1.Columns.Add("clmName1", "日付"); this.dataGridView1.Columns.Add("Time", "データ"); } this.dataGridView1.Rows.Add(); String[] csv = lin.Split(','); for (int c = 0; c <= csv.GetLength(0) - 1; c++) { if (c < this.dataGridView1.Columns.Count) { this.dataGridView1.Rows[r].Cells[c].Value = csv[c]; } } r += 1; } } while (lin != null); // CSVファイルクローズ sw.Close(); tabControl1.SelectedIndex = 1; }

  • DataGridviewから抽出

    VB2005初心者です。 csvデータをStreamReaderを使用しDataGridviewへ表示しました。 DataGridに表示されたデータを抽出するにはどうすればいいのでしょうか?よろしくお願いします。

  • 3つ以上の外部結合から抽出するSQL構文

    次の3つのTABLEから期待する結果(結果を参照)を導きたいのですがJOIN等を使用しても期待と異なります。SQLを教えて下さい。結果は、SELECTでもVIEWでも構いません。一つのSQLでなくても構いません。 ●テーブル構成 テーブル名 - TB_A- -----TB_B--- ----TB_C----         ------ ------------- ------------- 列名     EMPNO EMPNO DATA1 EMPNO DATA2 レコード1   000001 000002 AAAAA 000001 AAAAA レコード2   000002 000002 BBBBB 000002 BBBBB レコード3   000003 000002 CCCCC 000003 CCCCC ●結果 列名     EMPNO DATA1 DATA2 レコード1   000001 ???????? AAAAA レコード2   000002 AAAAA BBBBB レコード3 000002 BBBBB ???????? レコード4   000002 CCCCC ???????? レコード5   000003 ???????? CCCCC

  • VB2005 DataGridView CurrentCell.ColumnIndex

    VB2005です DataGridViewで + ヘッダ + 項目名1 + 項目名2 + 項目名3 + 項目名4 + 列の順序変更で + ヘッダ + 項目名3 + 項目名2 + 項目名4 + 項目名1 + とした場合 i = DataGridView1.CurrentCell.ColumnIndex Label1.Text = DataGridView1.Columns(i).HeaderText としてヘッダ項目名を取得できましたが、 For x=0 to DataGridView1.ColumnCount - 1 として、セルの左から順番に項目名を取得するにはいかがしたらよろしいでしょうか? コードでCurrentCellを移動する方法も合わせて教えて下さい。 また上記2行のコードをもっとスマートに書けないでしょうか?

  • vbscriptでファイルの読み書き

    vbscript(ASP)勉強中です。 vbscriptを使用して、ファイルを読み込み、それを違うものに変えて新しいファイルを作成して書き込む。と言う流れができません。 読み込み、書き込み部分は分かるのですが、変換部分で悩んでいます。 例えば、読み込むファイルには、 [aaaaa] aiueo=あいうえお kakikukeko=かきくけこ [bbbbb] sasisuseso=さしすせそ となっており、それを下記のように変えたいのです。 abc あいうえお def かきくけこ ghi さしすせそ アルファベットとひらがなの前には、半角スペースが入ります。 これが50行くらいあるとして、一番ポピュラーな変換方法は どのようになるのでしょうか? よろしくお願いします。

  • 別フォームからdatagridviewの削除

    vb.netで、form1のdatagridviewを、form2のボタンをクリックした際に、datagridviewのrowを削除したいのですが、newでform1を参照して、datagridviewのrowを削除しようとしたのですが、form1のdatagridviewの情報をform2で取得できなくて、実行時エラーになってしまい困っています。 form1のdatagridviewのデータは、csvファイルを接続して、loadイベントで表示させるようにしています。 わかるかたいらっしゃいましたら、教えていただけると助かります。 宜しくお願いいたします。

  • [VC++] CSVファイルから読み込み、DataGridViewに表示したい

    初めまして。プログラミング初心者でありまして、知識はC言語を少しかじった程度です。 今回プログラムを行う上で、C++や.NETを独学しています。 大分色々な書籍を読んだり、ネットも廻ったのですが、まだまだ理解に乏しい部分が多いです。 なかなか調べても解らない部分が多いため、皆さんの知識をお貸しいただきたいと投稿させていただきました。 よろしくお願いします。 VC++2005のC++/CLIでプログラムを作成しています。 CSVファイルから内容を読み込み、DataGridVeiwに表示させたいと考えています。 条件は以下のような感じです。 ・ファイル内容は数字のみ 例)1,2,3,1,0,6,0,4   7,1,5,1,8,0,1,0   1,0,1,6,0,5,1,9 ・読み込むごとに行列の長さが違う ・行や列のヘッダーは無し 出来上がりイメージとしては 第2回 DataGridViewコントロールでマインスイーパ http://www.atmarkit.co.jp/fdotnet/vblab/gridlab_02/gridlab_02_01.html 読み込むCSVファイルのサイズによってセル数が変わるようにしたいです。 ファイルを読み込んでDataGridViewに表示させるという、初歩的な部分から詰まってしまっています。 一部分のことでもいいので、どうかご教授願います。