DOBON.NET DOBON.NETプログラミング掲示板過去ログ

CSVファイルをDataGridViewに表示し、行を削除する方法について

環境/言語:[Win7Pro(32bit) VB2008]
分類:[.NET]

いつもお世話になっています。日頃から参考させて頂き、勉強しています。

今回、CSVファイルのデータをGataGridViewに表示し、選択した行のデータを削除し、CSVファイルのデータも同時に削除するプログラムを作成しています。
最終的には、新規登録、修正、挿入なども作成する予定です。

作成したプログラムを下記に示します。

Private Sub ButtonDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonDel.Click

Dim intRowIdx As Integer

Dim con As New OleDbConnection()
Dim cmd As New OleDbCommand()
Dim dAdp As New OleDbDataAdapter()

Dim dSet As New DataSet()
Dim DelRow As DataRow

Dim cb As OleDbCommandBuilder

Try

con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Application.StartupPath & "\;" & _
"Extended Properties=""Text;HDR=YES;FMT=Delimited"""

cmd.Connection = con ' コネクションの設定

cmd.CommandText = "SELECT * FROM MasterDt.txt"

dAdp.SelectCommand = cmd 'データを取得する

dSet.Clear() 'データセットのクリア

dAdp.MissingSchemaAction = MissingSchemaAction.AddWithKey

dAdp.Fill(dSet) 'dSetへデータをセット

cb = New OleDbCommandBuilder(dAdp)

intRowIdx = DataGridView1.CurrentCell.RowIndex '選択行

DelRow = dSet.Tables(0).Rows(intRowIdx)

DelRow.Delete()

DelRow.AcceptChanges()

dAdp.Update(dSet)

DataGridView1.DataSource = dSet.Tables(0)

Catch ex As Exception

MessageBox.Show(ex.Message, "例外発生")

End Try

End Sub

DataGridViewの選択行は、削除されましたが、CSVファイルからは削除されていませんでした。また、エラーの発生もありませんでした。

金曜日から色々と調べていますが、どうしても分かりません。

大変申し訳ありませんが、DataGridViewで変更した内容をCSVファイルに更新する方法をご教授願います。
> DelRow.Delete()
> DelRow.AcceptChanges()
> dAdp.Update(dSet)
Delete=削除マークを付ける
AcceptChanges=その変更を受け入れる=実際にテーブルから削除する
なので、これでは Update を呼び出すときにはもう削除対象が DataTable に存在してません。

JET で csv にアクセスする場合、INSERT は有効ですが UPDATE/DELETE は不可能のはずです。
これは csv がテキストファイルであるということを考えれば仕方ないところでしょう。

望ましいのは csv ではなくまともな DB を使うことですが(SQL Server Compact とかの小規模な物を含めて)、
csv でなければならないのなら、StreamWriter など使って更新ごとに完全に上書きすることになるでしょう(INSERT だけなら追記で事足りますが)。
その場合、一行修正するごとにファイルを更新するのではなく、一通り操作が終わってからファイルを更新する形にするのが自然かもしれません。
Hongliang様、早速の回答ありがとうございます。

> JET で csv にアクセスする場合、INSERT は有効ですが UPDATE/DELETE は不可能のはずです。

大変、勉強になりました。

今まで、通りStreamWriterを使用して編集処理を実行します。

また機会がありましたらよろしくお願いします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板