質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

13573閲覧

VB.NETでデータを保持したい

.o.

総合スコア14

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/06/30 06:48

Visual Studioを使いVB.NETでウィンドウズアプリケーションを作成しています。

DataGridViewを配置し、CSVを開きそのデータをDataGridViewに反映させる事は出来ました。

次に、マスターデータとなるものをアプリケーションで保持したいと考え調べたのですが中々自分に合う参考サイトが見つかりませんでした。

自分がイメージしてるのは、登録画面があり各必要な項目を入れて登録すると削除するまでそのデータを保持(アプリケーションを一回落としても保持したまま)し、検索画面で全てのデータから指定した条件のデータをDataGridViewで表示するという事です。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

.o.

2017/06/30 08:32

早速の回答ありがとうございます。 CSV形式でデータを保持していくしか無いのでしょうか? ある程度の知識が身につけば、在庫管理システムを作りたいと思っております。 その際データをCSV形式で管理するというのは少し疑問が浮かびます。 まずは初歩のCSVでの管理から・・・というのは痛いほどわかりますが、よろしければDBのデータ管理方法を教えていただきたいです。 よろしくお願い致します。
motuo

2017/06/30 08:39

MySQL等のRDBでやりたい、という事ですか?もちろん可能ですが、、、 (CSVを開きそのデータをDataGridViewに反映させる事は出来ました。という言葉からCSVでデータを保有したいものだとばかり…) どのレベルから何を知りたいのかを、具体的に教えて貰えますか? 例えば、データベースの設計の仕方を知りたいとか、RDBからのデータの取得の方法を知りたいとか。 全部!というのは無しでお願いします。
motuo

2017/06/30 09:08

とりあえず、MySQLでデータ取得~更新する版のソースも添付しておきますね。
.o.

2017/07/03 01:08

回答ありがとうございます。 どのレベルから・・・MySQLでのデーターベース構築方法は存じております。 GUIでのMySQLへのデータ追加、また全てのデータから特定の条件で絞込したデータをGridに表示をお聞きしたいです。
motuo

2017/07/03 01:40

とりあえず、私が提示したソースでDataGridViewからMySQLへの行の追加・削除が可能になっています。 絞り込みについては、SQLにWhereを付ければ良いかと思いますが、SQLが分からないのでしょうか?
guest

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

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

.o.

2017/07/03 01:09

ありがとうございます。 参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問