Visual Studioを使いVB.NETでウィンドウズアプリケーションを作成しています。
DataGridViewを配置し、CSVを開きそのデータをDataGridViewに反映させる事は出来ました。
次に、マスターデータとなるものをアプリケーションで保持したいと考え調べたのですが中々自分に合う参考サイトが見つかりませんでした。
自分がイメージしてるのは、登録画面があり各必要な項目を入れて登録すると削除するまでそのデータを保持(アプリケーションを一回落としても保持したまま)し、検索画面で全てのデータから指定した条件のデータをDataGridViewで表示するという事です。
宜しくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
参考サイトとしては、下記が良いのではないかと思います。
DataTableや配列等をCSV形式のファイルとして保存する
例として、CSVファイルをデータソースとして読込み、変更があったら同じCSVに書き込みを行うサンプルを上げておきます。
Public Class Form1 Const csvDir As String = "C:\test\" Const csvFileName As String = "test.csv" ''' <summary> ''' 最初の読込 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '接続文字列 Dim conString As String = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" _ + csvDir + ";Extensions=asc,csv,tab,txt;" Dim con As New Odbc.OdbcConnection(conString) Dim commText As String = "SELECT * FROM [" + csvFileName + "]" Dim da As New Odbc.OdbcDataAdapter(commText, con) 'DataTableに格納する Dim dt As New DataTable da.Fill(dt) testDGV.DataSource = dt End Sub ''' <summary> ''' ボタンを押したらCSVを吐き出す ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub update_Click(sender As Object, e As EventArgs) Handles update.Click Dim dt As DataTable = testDGV.DataSource dt.AcceptChanges()'データ更新内容の確定 ConvertDataTableToCsv(dt, csvDir + csvFileName, True) End Sub ''' <summary> ''' DataTableの内容をCSVファイルに保存する ''' </summary> ''' <param name="dt">CSVに変換するDataTable</param> ''' <param name="csvPath">保存先のCSVファイルのパス</param> ''' <param name="writeHeader">ヘッダを書き込む時はtrue。</param> Public Sub ConvertDataTableToCsv( dt As DataTable, csvPath As String, writeHeader As Boolean) 'CSVファイルに書き込むときに使うEncoding Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") '書き込むファイルを開く Dim sr As New System.IO.StreamWriter(csvPath, False, enc) Dim colCount As Integer = dt.Columns.Count Dim lastColIndex As Integer = colCount - 1 Dim i As Integer 'ヘッダを書き込む If writeHeader Then For i = 0 To colCount - 1 'ヘッダの取得 Dim field As String = dt.Columns(i).Caption '"で囲む field = EncloseDoubleQuotesIfNeed(field) 'フィールドを書き込む sr.Write(field) 'カンマを書き込む If lastColIndex > i Then sr.Write(","c) End If Next '改行する sr.Write(vbCrLf) End If 'レコードを書き込む Dim row As DataRow For Each row In dt.Rows For i = 0 To colCount - 1 'フィールドの取得 Dim field As String = row(i).ToString() '"で囲む field = EncloseDoubleQuotesIfNeed(field) 'フィールドを書き込む sr.Write(field) 'カンマを書き込む If lastColIndex > i Then sr.Write(","c) End If Next '改行する sr.Write(vbCrLf) Next '閉じる sr.Close() End Sub ''' <summary> ''' 必要ならば、文字列をダブルクォートで囲む ''' </summary> Private Function EncloseDoubleQuotesIfNeed(field As String) As String If NeedEncloseDoubleQuotes(field) Then Return EncloseDoubleQuotes(field) End If Return field End Function ''' <summary> ''' 文字列をダブルクォートで囲む ''' </summary> Private Function EncloseDoubleQuotes(field As String) As String If field.IndexOf(""""c) > -1 Then '"を""とする field = field.Replace("""", """""") End If Return """" & field & """" End Function ''' <summary> ''' 文字列をダブルクォートで囲む必要があるか調べる ''' </summary> Private Function NeedEncloseDoubleQuotes(field As String) As Boolean Return field.IndexOf(""""c) > -1 OrElse field.IndexOf(","c) > -1 OrElse field.IndexOf(ControlChars.Cr) > -1 OrElse field.IndexOf(ControlChars.Lf) > -1 OrElse field.StartsWith(" ") OrElse field.StartsWith(vbTab) OrElse field.EndsWith(" ") OrElse field.EndsWith(vbTab) End Function End Class
MySQL出のデータ取得~更新
Imports MySql.Data.MySqlClient Public Class Form1 Dim dt As DataTable Dim da As MySqlDataAdapter ''' <summary> ''' 最初の読込 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim con As MySqlConnection = createConnection() '発行するSQL文を作成する Dim SqlStr = "SELECT * FROM store" ' データ取得のためのアダプタの設定 da = New MySqlDataAdapter(SqlStr, con) Dim cb As New MySqlCommandBuilder(da) ' データを取得し、セットする dt = New DataTable da.Fill(Dt) testDGV.DataSource = dt con.Close() End Sub ''' <summary> ''' ボタンを押したらデータベースをアップデートする ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub update_Click(sender As Object, e As EventArgs) Handles update.Click da.Update(dt) End Sub ''' <summary> ''' MySQLのコネクションを作成する ''' </summary> ''' <returns></returns> Private Function createConnection() As MySqlConnection Dim Builder = New MySqlConnectionStringBuilder() ' データベースに接続するために必要な情報をBuilderに与える Builder.Server = "localhost" Builder.Port = 3306 Builder.UserID = "test" Builder.Password = "test" Builder.Database = "test" Dim ConStr = Builder.ToString() ' データベースに接続するための準備をして、実際につなぐ Dim Con As New MySqlConnection Con.ConnectionString = ConStr Con.Open() Return Con End Function End Class
投稿2017/06/30 07:19
編集2017/06/30 09:11総合スコア3027
0
ベストアンサー
DotNetならSQLServer系が一番相性いいと思いますよ
サーバー立てて構わないならSQLServerのExpress版がありますし、サーバー立てる必要もない(立てられない)ということならSQLServer Compactもあります
SQLServer Compactは非推奨のテクノロジーになっていますが使うと大変便利です
規模が大きくなってきたり複数のPCで共有したくなったらSQLServer(サーバー立てる)に移行も簡単です
うまくいけば接続文字列変えるだけで動くレベル
こっちならADO.Net、SQLServerとやりたいことの組み合わせで、ほぼコピペできるコードがあちこちに転がっているという情報の充実度も有利ですね
別アプローチとして、件数が増えるとパフォーマンスが難になってくることがあるかもしれませんが、DataTableを使っているならそのDataTableをXMLにシリアライズしておくこともできますね
こっちなら
DataTable.WriteXml
DataTable.ReadXml
あたりを参照されてください
投稿2017/06/30 21:26
総合スコア3939
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/30 08:32
2017/06/30 08:39
2017/06/30 09:08
2017/07/03 01:08
2017/07/03 01:40