いつもお世話になっております。
現在課題としてVB.NETでCSVファイルを使った簡単な連絡先管理システムのようなものを作成しています。
機能としては、
1.既存のCSVファイルを読込み、リストボックスに番号、名前を一覧表示する
→あかさたな~でソートできるようにする
2.リストボックスの連絡先クリックでテキストボックスに詳細を表示
3.追加ボタンクリックで連絡先の新規追加
4.更新ボタンクリックで既存の連絡先の内容更新
5.削除ボタンクリックで既存の連絡先の削除
→いずれもCSVにデータを保存
を想定しています。
読込機能は、CSVからデータを読込みデータテーブルに格納してからリストボックス、テキストボックスに表示しています。
そこで、テキストボックスから編集した内容をデータテーブルに保存し、CSVを更新したいのですが、なかなかうまくいきません。
更新も削除も、編集したデータテーブルで丸ごと上書きするような方法をかんがえているのですが、現在のソースコードではなぜかCSVのデータが消えてしまいます。
データテーブルの使い方もイマイチ理解できていない初心者ですが、原因と解決策を教えていただけないでしょうか。
※CSVの内容は以下のようなかたちです。
0001,中山太朗,神奈川県,0000-00-0000,nakayama@aaa.com
0002,土田新太郎,新潟県,0120-00-1245,sdjnaidm@aaa.com
0003,中田三郎,富山県,0786-00-0000,fhsuw@aaa.com
0004,田中史郎,愛知県,0516-00-2652,aaaaa@aaa.com
0005,山田一郎,石川県,0585-58-5482,yamada@aaaa.com
0006,鈴木五郎,山梨県,0555-55-5555,suzuki@aaaa.com
0007,大田六郎,福岡県,5584-58-2541,oota@saaa.com
###該当のソースコード
'CSV処理クラス Public Class CsvCtl Private mTable As New DataTable Private mRow As DataRow ' CSVファイルの読み込み(起動時) Public Sub ReadData() 'フィールド(列)を追加 mTable.Columns.Add("number", Type.GetType("System.String")) mTable.Columns.Add("name", Type.GetType("System.String")) mTable.Columns.Add("address", Type.GetType("System.String")) mTable.Columns.Add("telephone", Type.GetType("System.String")) mTable.Columns.Add("mail", Type.GetType("System.String")) 'カンマ区切りテキストを読み込み、データテーブルに追加 Dim parser As TextFieldParser parser = My.Computer.FileSystem.OpenTextFieldParser("C:\adoresu.txt", ",") While Not parser.EndOfData mRow = mTable.NewRow mRow.ItemArray = parser.ReadFields mTable.Rows.Add(mRow) End While Call parser.Close() MainForm.DataGridView1.DataSource = mTable 'リストボックスに名前を表示 MainForm.ListBox1.DataSource = mTable MainForm.ListBox1.DisplayMember = "name" 'データテーブルの内容をテキストボックスに表示する MainForm.TextBox1.DataBindings.Add("Text", mTable, "number") MainForm.TextBox2.DataBindings.Add("Text", mTable, "name") MainForm.TextBox3.DataBindings.Add("Text", mTable, "address") MainForm.TextBox4.DataBindings.Add("Text", mTable, "telephone") MainForm.TextBox5.DataBindings.Add("Text", mTable, "mail") parser.Dispose() End Sub '編集内容の更新(ボタンクリック時) Public Sub Updatectl() Dim Writer As System.IO.StreamWriter = Nothing Try Writer = New System.IO.StreamWriter("C:\adoresu.txt", False, System.Text.Encoding.GetEncoding("Utf-8")) Dim colCount As Integer = mTable.Columns.Count Dim lastColIndex As Integer = colCount - 1 Dim i As Integer 'レコードを書き込む Dim row As DataRow For Each row In mTable.Rows For i = 0 To colCount - 1 'フィールドの取得 Dim field As String = row(i) 'フィールドを書き込む Writer.Write(field) 'カンマを書き込む If lastColIndex > i Then Writer.Write(","c) End If Next '改行する Writer.Write(vbCrLf) Next Catch ex As Exception MessageBox.Show(ex.Message, "Write") Finally '閉じる Writer.Flush() Writer.Close() MsgBox("データを更新しました") End Try End Sub End Class
###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2012を使用しています。
そのほか必要な情報などございましたらご指摘お願いします。
たびたび似たような質問をするかもしれませんが、よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー