tag:crieit.net,2005:https://crieit.net/tags/VB.Net/feed 「VB.Net」の記事 - Crieit Crieitでタグ「VB.Net」に投稿された最近の記事 2019-10-23T09:50:42+09:00 https://crieit.net/tags/VB.Net/feed tag:crieit.net,2005:PublicArticle/15500 2019-10-23T09:50:42+09:00 2019-10-23T09:50:42+09:00 https://crieit.net/posts/VB-NET-log4net 【VB.NET】log4netを使ったログ出力を試してみた <p>おはようございます。</p> <p>VB.NETでも log4net を使ってログ出力を試してみました。</p> <p>プログラムは前回のものを使用します。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2018/01/25/post-3769/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】PostgreSQL に接続してデータ操作(追加・更新・削除)をしてみる</a></p> <p>また、WPF@C#は下記の記事を参考にしてください。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/06/10/post-1210/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【WPF】log4netを使ってログを出力する</a></p> <h2 id="Nuget でパッケージをダウンロード"><a href="#Nuget+%E3%81%A7%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89">Nuget でパッケージをダウンロード</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbLog4net000.jpg" alt="NuGetパッケージ管理を表示" /></p> <p>ソリューションエクスプローラーからプロジェクトを選択、右クリックし<br /> 「Nuget パッケージの管理」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbLog4net001.jpg" alt="NuGetパッケージ管理画面" /></p> <p>Nuget パッケージ管理画面が表示されるので、<br /> 検索窓に「log4net」を入力し、「log4net」を選択、インストールボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbLog4net002.jpg" alt="プレビュー画面" /></p> <p>変更の確認ダイアログが表示されるので、「OK」ボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbLog4net003.jpg" alt="出力ビュー" /></p> <p>出力ビューに「終了」が出力されればOKです。</p> <h2 id="アセンブリ設定ファイルの修正"><a href="#%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%AA%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BF%AE%E6%AD%A3">アセンブリ設定ファイルの修正</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbLog4net004.jpg" alt="アセンブリファイルの修正" /></p> <p>パッケージエクスプローラーから対象のファイルを開きます。</p> <p>AccemblyInfo.vb</p> <pre><code> // log4net を利用するための設定 // <Assembly: log4net.Config.XmlConfigurator(ConfigFile:="log4net.config", Watch:=True)> </code></pre> <h2 id="設定ファイルの追加"><a href="#%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%BF%BD%E5%8A%A0">設定ファイルの追加</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbLog4net005.jpg" alt="新規ファイル追加" /></p> <p>パッケージエクスプローラーから「追加」>「新しい項目」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbLog4net006.jpg" alt="ファイル追加画面" /></p> <p>「アプリケーション構成ファイル」を選択して「追加」ボタンをクリックします。</p> <p>log4net.config</p> <pre><code> <?xml version="1.0" encoding="utf-8" ?> <!-- [log4net.config] --> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <appSettings> <!-- log4net 内部のデバッグメッセージを出力 --> <add key="log4net.Internal.Debug" value="true" /> </appSettings> <log4net> <!-- コンソール出力用のアペンダ --> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <!-- 出力文字列のフォーマット --> <layout type="log4net.Layout.PatternLayout"> <!--^「日付、スレッド、レベル、logger名、メッセージ」が出力^--> <!--^「%-5p」というのは5文字以下の場合、右側に空白を入れる設定^--> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> <!-- ファイル出力用のアペンダ(日付でローテーション) --> <appender name="DailyFileAppender" type="log4net.Appender.RollingFileAppender"> <!-- ログファイルの切替 { サイズ: Size, 日付: Date } --> <param name="RollingStyle" value="Date" /> <!-- ファイル名 --> <param name="File" value="log/" /> <!-- ファイル名に付加する日付パターン --> <param name="DatePattern" value='yyyyMMdd".log"' /> <!-- ファイル名の固定 --> <param name="StaticLogFileName" value="false" /> <!-- ファイル書き込み { 追記: true, 上書き: false } --> <param name="AppendToFile" value="true" /> <!-- 出力文字列のフォーマット --> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%-5level %date{yyyy/MM/dd HH:mm:ss, fff} [%thread] %logger - %message%newline" /> </layout> </appender> <!-- デフォルトの出力設定 --> <root> <level value="ALL" /> <appender-ref ref="ConsoleAppender" /> <appender-ref ref="DailyFileAppender" /> </root> </log4net> </configuration> </code></pre> <p> </p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbLog4net007.jpg" alt="ビルドオプション" /></p> <p>log4net.configファイルのプロパティで、<br /> 「出力ディレクトリにコピーする」を「常にコピーする」に変更します。</p> <h2 id="検索ボタンクリック時にログを出力"><a href="#%E6%A4%9C%E7%B4%A2%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E6%99%82%E3%81%AB%E3%83%AD%E3%82%B0%E3%82%92%E5%87%BA%E5%8A%9B">検索ボタンクリック時にログを出力</a></h2> <p>次の記述を追加します。</p> <p>Form1.vb</p> <pre><code>Form1.vb ' ライブラリのインポート import log4net; public Class Form1 ' ログ出力用インスタンスの宣言 Private logger As ILog = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType) . . . 省略 ''' <summary> ''' 検索ボタンクリックイベント. ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click logger.Info("MainWindows 検索ボタンクリック") search() End Sub </code></pre> <p> </p> <h2 id="ログを出力してみる"><a href="#%E3%83%AD%E3%82%B0%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">ログを出力してみる</a></h2> <p>アプリケーションをデバッグ起動し、検索ボタンをクリックします。</p> <p>コンソール出力にログが出力されるのを確認します。<br /> 実行ディレクトリ>log>yyyymmdd.log を確認、ログが出力されていればOKです。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>WPF@C#とほとんど同じ手順で使うことができました。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15493 2019-10-20T10:36:15+09:00 2019-10-20T10:36:15+09:00 https://crieit.net/posts/VB-NET-PostgreSQL 【VB.NET】PostgreSQL に接続してデータ操作(追加・更新・削除)をしてみる <p>おはようございます。</p> <p>今回はPostgreSQLで追加、更新、削除をやってみましたが、<br /> Oracle、MySQLと変わらず、クラスを変更するだけでほぼ対応ができてしまいました。</p> <p>プログラムは前回のものを参考にしてください。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2018/01/24/post-3760/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】PostgreSQL に接続してデータを DataGridView に表示してみる</a></p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="追加(行追加)処理"><a href="#%E8%BF%BD%E5%8A%A0%EF%BC%88%E8%A1%8C%E8%BF%BD%E5%8A%A0%EF%BC%89%E5%87%A6%E7%90%86">追加(行追加)処理</a></h3> <p>Form1.vb</p> <pre><code> ''' <summary> ''' 追加ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click ' 追加後に更新されていなければ処理しない If (AddRowFlg) Then Return End If AddRowFlg = True Using conn As New NpgsqlConnection("Server=localhost; Port=5432; User Id=USER01;Password=USER01;Database=DB01") ' データベースオープン conn.Open() ' データ追加 Using con As New DataContext(conn) Dim idx = dgvCat.Rows.Count() ' 行追加 dgvCat.Rows.Add() ' 種別マスタ取得 ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 Dim cmd As NpgsqlCommand = New NpgsqlCommand("SELECT * FROM MSTKIND", conn) Dim da As NpgsqlDataAdapter = New NpgsqlDataAdapter(cmd) Dim dt As DataTable = New DataTable() da.Fill(dt) Dim kindList As List(Of Kind) = New List(Of Kind) Dim k As Kind = New Kind() For Each row As DataRow In dt.Rows k = New Kind() k.KindCd = row("KIND_CD").ToString() k.KindName = row("KIND_NAME").ToString() kindList.Add(k) Next ' 猫一覧取得 cmd = New NpgsqlCommand("SELECT * FROM TBLCAT", conn) da = New NpgsqlDataAdapter(cmd) dt = New DataTable() da.Fill(dt) Dim newNo = 0 ' 使用できるNoを判定 For i As Integer = 1 To dt.Rows.Count() + 1 Dim selectNo = i If dt.Select("No = '" + selectNo.ToString + "'").Length = 0 Then newNo = selectNo End If Next ' No(プライマリなので編集不可) Dim no = New DataGridViewTextBoxCell() no.Value = newNo dgvCat(0, idx) = no dgvCat(0, idx).ReadOnly = True ' 名前 Dim name = New DataGridViewTextBoxCell() dgvCat(1, idx) = name ' 性別 Dim sex = New DataGridViewComboBoxCell() sex.Items.AddRange({"&#x2642;", "&#x2640;"}) sex.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(2, idx) = sex ' 年齢 Dim age = New DataGridViewTextBoxCell() dgvCat(3, idx) = age ' 種別 Dim kind = New DataGridViewComboBoxCell() kind.DataSource = kindList kind.DisplayMember = "KindName" kind.ValueMember = "KindCd" kind.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(4, idx) = kind ' 好物 Dim favorite = New DataGridViewTextBoxCell() dgvCat(5, idx) = favorite End Using conn.Close() End Using End Sub </code></pre> <h3 id="更新処理"><a href="#%E6%9B%B4%E6%96%B0%E5%87%A6%E7%90%86">更新処理</a></h3> <p>Form1.vb</p> <pre><code> ''' <summary> ''' 更新ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click Using conn = New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") ' データベースオープン conn.Open() ' データ更新 For i = 0 To dgvCat.Rows.Count - 1 ' テーブルから対象のデータを取得 Dim no As Integer = dgvCat(0, i).Value ' シーケンス列としていないので、 ' 最初に件数を取得して No を計算する Dim cmd As OracleCommand = New OracleCommand("SELECT COUNT(*) FROM TBLCAT WHERE No = '" + no.ToString() + "'", conn) Dim cnt As Decimal = cmd.ExecuteScalar() If (cnt = 0) Then ' データ追加 Dim query = "INSERT INTO TBLCAT VALUES (" + (cnt + 1) + ", '" + dgvCat(1, i).Value + "'" + ", '" + dgvCat(2, i).Value + "'" + ", " + dgvCat(3, i).Value + "'" + ", '" + dgvCat(4, i).Value + "'" + ", '" + dgvCat(5, i).Value + "')" cmd = New OracleCommand(query, conn) cmd.ExecuteNonQuery() Else ' データ変更 Dim query = "UPDATE TBLCAT SET" + " NAME = '" + dgvCat(1, i).Value.ToString() + "'" + ", SEX = '" + dgvCat(2, i).Value.ToString() + "'" + ", AGE = '" + dgvCat(3, i).Value.ToString() + "'" + ", KIND_CD = '" + dgvCat(4, i).Value.ToString() + "'" + ", FAVORITE = '" + dgvCat(5, i).Value.ToString() + "' " + "WHERE NO = '" + dgvCat(0, i).Value.ToString() + "'" cmd = New OracleCommand(query, conn) cmd.ExecuteNonQuery() End If Next conn.Close() End Using AddRowFlg = False ' データ再検索 search() MessageBox.Show("データを更新しました。") End Sub </code></pre> <p> </p> <h3 id="削除処理"><a href="#%E5%89%8A%E9%99%A4%E5%87%A6%E7%90%86">削除処理</a></h3> <p>Form1.vb</p> <pre><code> ''' <summary> ''' 削除ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click Using conn = New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") ' データベースオープン conn.Open() ' 選択されている行 For Each r As DataGridViewRow In dgvCat.SelectedRows Dim Cat As Cat = CType(dgvCat.DataSource(), List(Of Cat)).Item(r.Index) ' データ削除 Dim query As String = "DELETE FROM TBLCAT WHERE NO = " + Cat.No ' クエリ実行 Dim cmd As OracleCommand = New OracleCommand(query, conn) cmd.ExecuteNonQuery() Next conn.Close() End Using ' データ再検索 search() MessageBox.Show("データを削除しました。") End Sub </code></pre> <p> </p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>Oracle、MySQLからPostgreSQLに変更するのも簡単にできそうですね。<br /> 次回以降はまた別の言語をやっていこうかと思います。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15491 2019-10-18T10:31:07+09:00 2019-10-18T10:31:07+09:00 https://crieit.net/posts/VB-NET-PostgreSQL-DataGridView 【VB.NET】PostgreSQL に接続してデータを DataGridView に表示してみる <p>おはようございます。</p> <p>今回はVB.NETでPostgreSQLに接続、データの取得をやってみます。</p> <p>プログラムは前回のものを流用します。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2018/01/18/3718/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】MySQL(MariaDB)に接続してデータ操作(追加・更新・削除)をしてみる</a></p> <p>また、PostgreSQL環境の作成は以下の記事を参考にしてください<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/07/25/post-1748/" target="_blank" rel="noopener noreferrer" data-blogcard="1">PostgreSQL 9.6.3 インストールからテーブル作成まで</a></p> <h2 id="Nuget でパッケージをダウンロード"><a href="#Nuget+%E3%81%A7%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89">Nuget でパッケージをダウンロード</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbPostgreSQL000.jpg" alt="NuGetパッケージ管理の選択" /></p> <p>ソリューションエクスプローラーからプロジェクトを選択、右クリックし<br /> 「Nuget パッケージの管理」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbPostgreSQL001.jpg" alt="NuGetパッケージ管理画面" /></p> <p>Nuget パッケージ管理画面が表示されるので、<br /> 検索窓に「npgsql」を入力し、「Npgsql」を選択、インストールボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbPostgreSQL002.jpg" alt="プレビュー画面" /></p> <p>プレビュー画面が表示された場合は、「OK」ボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbPostgreSQL003.jpg" alt="ライセンス同意画面" /></p> <p>ライセンス同意画面が表示されるので、「同意する」ボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbPostgreSQL004.jpg" alt="出力ビュー" /></p> <p>出力ビューに「終了」が表示されれば完了です。</p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="宣言の追加"><a href="#%E5%AE%A3%E8%A8%80%E3%81%AE%E8%BF%BD%E5%8A%A0">宣言の追加</a></h3> <p>ダウンロードしたパッケージを利用するための宣言を追加します。</p> <p>Form1.vb</p> <pre><code>Imports Npgsql </code></pre> <h3 id="初期表示処理の修正"><a href="#%E5%88%9D%E6%9C%9F%E8%A1%A8%E7%A4%BA%E5%87%A6%E7%90%86%E3%81%AE%E4%BF%AE%E6%AD%A3">初期表示処理の修正</a></h3> <p>MySQLに接続していた部分を PostgreSQLに接続するように修正し、<br /> MySqlCommand、MySqlDataAdapterもそれぞれ PostgreSQL用のクラスに変更します。</p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' フォームロード時の処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Using conn As New NpgsqlConnection("Server=localhost; Port=5432; User Id=USER01;Password=USER01;Database=DB01") ' データベースオープン conn.Open() ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 Dim cmd As NpgsqlCommand = New NpgsqlCommand("SELECT * FROM MSTKIND", conn) Dim da As NpgsqlDataAdapter = New NpgsqlDataAdapter(cmd) Dim dt As DataTable = New DataTable() da.Fill(dt) ' コンボボックスに値を設定 Dim sources As List(Of Kind) = New List(Of Kind) Dim k As Kind = New Kind() k.KindCd = "" k.KindName = "指定なし" sources.Add(k) For Each row As DataRow In dt.Rows k = New Kind() k.KindCd = row("KIND_CD").ToString() k.KindName = row("KIND_NAME").ToString() sources.Add(k) Next Me.cmbKind.DataSource = sources Me.cmbKind.DisplayMember = "KindName" ' データベースクローズ conn.Close() End Using End Sub </code></pre> <h3 id="検索処理の修正"><a href="#%E6%A4%9C%E7%B4%A2%E5%87%A6%E7%90%86%E3%81%AE%E4%BF%AE%E6%AD%A3">検索処理の修正</a></h3> <p>初期表示と同様、接続の処理とMysqlのクラスをPostgreSQL用に変更します。</p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' 検索処理 ''' </summary> Private Sub search() Using conn As New NpgsqlConnection("Server=localhost; Port=5432; User Id=USER01;Password=USER01;Database=DB01") ' データベースオープン conn.Open() ' 検索条件を指定してデータを取得 Using con As New DataContext(conn) Dim searchName As String = txtName.Text Dim searchKind As String = CType(cmbKind.SelectedValue, Kind).KindCd ' 種別マスタ取得 ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 Dim cmd As NpgsqlCommand = New NpgsqlCommand("SELECT * FROM MSTKIND", conn) Dim da As NpgsqlDataAdapter = New NpgsqlDataAdapter(cmd) Dim dt As DataTable = New DataTable() da.Fill(dt) Dim kindList As List(Of Kind) = New List(Of Kind) Dim k As Kind = New Kind() For Each row As DataRow In dt.Rows k = New Kind() k.KindCd = row("KIND_CD").ToString() k.KindName = row("KIND_NAME").ToString() kindList.Add(k) Next ' 猫一覧取得 Dim Sql As String = "SELECT * FROM TBLCAT" Dim where As String = "" If (searchName <> "") Then where = " WHERE NAME LIKE '" + searchName + "%'" End If If (searchKind <> "") Then If (where <> "") Then where += " AND" Else where = " WHERE" End If where += " KIND_CD = '" + searchKind + "'" End If Sql += where cmd = New NpgsqlCommand(Sql, conn) da = New NpgsqlDataAdapter(cmd) dt = New DataTable() da.Fill(dt) ' データグリッドビューに設定 Dim i As Integer = 0 dgvCat.Rows.Clear() For i = 0 To dt.Rows.Count() - 1 ' 行追加 dgvCat.Rows.Add() ' No(プライマリなので編集不可) Dim no = New DataGridViewTextBoxCell() no.Value = dt.Rows(i)("No") dgvCat(0, i) = no dgvCat(0, i).ReadOnly = True ' 名前 Dim name = New DataGridViewTextBoxCell() name.Value = dt.Rows(i)("Name") dgvCat(1, i) = name ' 性別 Dim sex = New DataGridViewComboBoxCell() sex.Items.AddRange({"&#x2642; ", "&#x2640; "}) sex.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(2, i) = sex dgvCat(2, i).Value = dt.Rows(i)("Sex") ' 年齢 Dim age = New DataGridViewTextBoxCell() age.Value = dt.Rows(i)("Age") dgvCat(3, i) = age ' 種別 Dim kind = New DataGridViewComboBoxCell() kind.DataSource = kindList kind.DisplayMember = "KindName" kind.ValueMember = "KindCd" kind.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(4, i) = kind dgvCat(4, i).Value = dt.Rows(i)("Kind_Cd") ' 好物 Dim favorite = New DataGridViewTextBoxCell() favorite.Value = dt.Rows(i)("Favorite") dgvCat(5, i) = favorite Next End Using ' データベースクローズ conn.Close() End Using End Sub </code></pre> <p> </p> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbPostgreSQL005.jpg" alt="起動後の画面" /></p> <p>種別にデータが設定されました。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbPostgreSQL006.jpg" alt="検索結果" /></p> <p>検索ボタン押下でデータがグリッドに表示されました。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>PostgreSQLもほとんど変更無しで対応することができました。</p> <p>実は EntityFrameworkを利用する予定だったのですが、<br /> 依存ファイルが見つからないエラーで嵌ってしまったので断念。</p> <p>いずれ時間のある時にでも。。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15485 2019-10-16T09:41:26+09:00 2019-10-16T09:41:26+09:00 https://crieit.net/posts/VB-NET-MySQL-MariaDB 【VB.NET】MySQL(MariaDB)に接続してデータ操作(追加・更新・削除)をしてみる <p>前回に引き続き、MySQLの話し。<br /> 今回は追加、更新、削除をやってみましたが、ほとんど Oracle と変わらず。</p> <p>プログラムは前回のものを参考にしてください。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2018/01/17/post-3707/" target="_blank" rel="noopener noreferrer">【VB.NET】MySQL(MariaDB)に接続してデータ操作(追加・更新・削除)をしてみる</a></p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="更新処理"><a href="#%E6%9B%B4%E6%96%B0%E5%87%A6%E7%90%86">更新処理</a></h3> <pre><code> ''' <summary> ''' 更新ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click 'Using conn = New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") Using conn As New MySqlConnection("Database=DB01;Data Source=localhost;User Id=USER01;Password=USER01; sqlservermode=True;") ' データベースオープン conn.Open() ' データ更新 For i = 0 To dgvCat.Rows.Count - 1 ' テーブルから対象のデータを取得 Dim no As Integer = dgvCat(0, i).Value ' シーケンス列としていないので、 ' 最初に件数を取得して No を計算する Dim cmd As MySqlCommand = New MySqlCommand("SELECT COUNT(*) FROM TBLCAT WHERE No = '" + no.ToString() + "'", conn) Dim cnt As Decimal = cmd.ExecuteScalar() If (cnt = 0) Then ' データ追加 Dim query = "INSERT INTO TBLCAT VALUES (" + no.ToString() + ", '" + dgvCat(1, i).Value + "'" + ", '" + dgvCat(2, i).Value + "'" + ", '" + dgvCat(3, i).Value + "'" + ", '" + dgvCat(4, i).Value + "'" + ", '" + dgvCat(5, i).Value + "')" cmd = New MySqlCommand(query, conn) cmd.ExecuteNonQuery() Else ' データ変更 Dim query = "UPDATE TBLCAT SET" + " NAME = '" + dgvCat(1, i).Value.ToString() + "'" + ", SEX = '" + dgvCat(2, i).Value.ToString() + "'" + ", AGE = '" + dgvCat(3, i).Value.ToString() + "'" + ", KIND_CD = '" + dgvCat(4, i).Value.ToString() + "'" + ", FAVORITE = '" + dgvCat(5, i).Value.ToString() + "' " + "WHERE NO = '" + dgvCat(0, i).Value.ToString() + "'" cmd = New MySqlCommand(query, conn) cmd.ExecuteNonQuery() End If Next conn.Close() End Using AddRowFlg = False ' データ再検索 search() MessageBox.Show("データを更新しました。") End Sub </code></pre> <h3 id="削除処理"><a href="#%E5%89%8A%E9%99%A4%E5%87%A6%E7%90%86">削除処理</a></h3> <pre><code> ''' <summary> ''' 削除ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click 'Using conn = New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") Using conn As New MySqlConnection("Database=DB01;Data Source=localhost;User Id=USER01;Password=USER01; sqlservermode=True;") ' データベースオープン conn.Open() ' 選択されている行 For Each r As DataGridViewRow In dgvCat.SelectedRows Dim Cat As Cat = CType(dgvCat.DataSource(), List(Of Cat)).Item(r.Index) ' データ削除 Dim query As String = "DELETE FROM TBLCAT WHERE NO = " + Cat.No ' クエリ実行 Dim cmd As MySqlCommand = New MySqlCommand(query, conn) cmd.ExecuteNonQuery() Next conn.Close() End Using ' データ再検索 search() MessageBox.Show("データを削除しました。") End Sub </code></pre> <p> </p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>起動後の画面は割愛。</p> <p>OracleからMySQLに変更するのは簡単にできそうですね。<br /> 次回は PostgreSQL を試してみたいと思います。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15471 2019-10-10T11:45:58+09:00 2019-10-10T11:45:58+09:00 https://crieit.net/posts/VB-NET-MySQL-MariaDB-DataGridView 【VB.NET】MySQL(MariaDB)に接続してデータを DataGridView に表示してみる <p>今回はVB.NETでMySQLに接続、データの取得をやってみます。</p> <p>プログラムは前回のものを流用します。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/30/3581/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】Oracleに接続してデータを操作(追加・更新・削除)してみる</a></p> <p>また、C#@WPFでのMySQL接続は下記を参考にしてください。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/07/24/post-1729/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【WPF】MySQL(MariaDB)に接続してデータを DataGrid に表示してみる</a></p> <h2 id="Nuget でパッケージをダウンロード"><a href="#Nuget+%E3%81%A7%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89">Nuget でパッケージをダウンロード</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbMySQL1_000.jpg" alt="NuGetパッケージの管理" /></p> <p>ソリューションエクスプローラーからプロジェクトを選択、右クリックし<br /> 「Nuget パッケージの管理」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbMySQL1_001.jpg" alt="NuGetパッケージの管理画面" /></p> <p>Nuget パッケージ管理画面が表示されるので、<br /> 検索窓に「mysql」を入力し、「MySql.Data」を選択、インストールボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbMySQL1_002.jpg" alt="プレビュー画面" /></p> <p>プレビュー画面が表示された場合は、「OK」ボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbMySQL1_003.jpg" alt="ライセンス同意画面" /></p> <p>ライセンス同意画面が表示されるので、「同意する」ボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbMySQL1_004.jpg" alt="出力ビュー" /></p> <p>出力ビューに「終了」が表示されれば完了です。</p> <h2 id="画面(デザイナーソース)"><a href="#%E7%94%BB%E9%9D%A2%EF%BC%88%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%83%BC%E3%82%BD%E3%83%BC%E3%82%B9%EF%BC%89">画面(デザイナーソース)</a></h2> <pre><code><Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Class Form1 Inherits System.Windows.Forms.Form 'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。 <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub 'Windows フォーム デザイナーで必要です。 Private components As System.ComponentModel.IContainer 'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。 'Windows フォーム デザイナーを使用して変更できます。 'コード エディターを使って変更しないでください。 <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.dgvCat = New System.Windows.Forms.DataGridView() Me.ColNo = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.ColName = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.ColSex = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.ColAge = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.ColKind = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.ColRemark = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.lbName = New System.Windows.Forms.Label() Me.lbKind = New System.Windows.Forms.Label() Me.btnSearch = New System.Windows.Forms.Button() Me.txtName = New System.Windows.Forms.TextBox() Me.cmbKind = New System.Windows.Forms.ComboBox() Me.btnAdd = New System.Windows.Forms.Button() Me.btnUpdate = New System.Windows.Forms.Button() Me.btnDelete = New System.Windows.Forms.Button() CType(Me.dgvCat, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'dgvCat ' Me.dgvCat.AllowUserToAddRows = False Me.dgvCat.AllowUserToDeleteRows = False Me.dgvCat.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize Me.dgvCat.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.ColNo, Me.ColName, Me.ColSex, Me.ColAge, Me.ColKind, Me.ColRemark}) Me.dgvCat.Location = New System.Drawing.Point(12, 56) Me.dgvCat.Name = "dgvCat" Me.dgvCat.RowTemplate.Height = 21 Me.dgvCat.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect Me.dgvCat.Size = New System.Drawing.Size(488, 256) Me.dgvCat.TabIndex = 0 ' 'ColNo ' Me.ColNo.DataPropertyName = "no" Me.ColNo.HeaderText = "No" Me.ColNo.Name = "ColNo" Me.ColNo.Width = 30 ' 'ColName ' Me.ColName.DataPropertyName = "name" Me.ColName.HeaderText = "名前" Me.ColName.Name = "ColName" ' 'ColSex ' Me.ColSex.DataPropertyName = "sex" Me.ColSex.HeaderText = "性別" Me.ColSex.Name = "ColSex" Me.ColSex.Width = 35 ' 'ColAge ' Me.ColAge.DataPropertyName = "age" Me.ColAge.HeaderText = "年齢" Me.ColAge.Name = "ColAge" Me.ColAge.Width = 35 ' 'ColKind ' Me.ColKind.DataPropertyName = "kindCd" Me.ColKind.HeaderText = "種別" Me.ColKind.Name = "ColKind" Me.ColKind.Width = 120 ' 'ColRemark ' Me.ColRemark.DataPropertyName = "favorite" Me.ColRemark.HeaderText = "好物" Me.ColRemark.Name = "ColRemark" Me.ColRemark.Width = 120 ' 'lbName ' Me.lbName.AutoSize = True Me.lbName.Location = New System.Drawing.Point(12, 23) Me.lbName.Name = "lbName" Me.lbName.Size = New System.Drawing.Size(35, 12) Me.lbName.TabIndex = 1 Me.lbName.Text = "名前:" ' 'lbKind ' Me.lbKind.AutoSize = True Me.lbKind.Location = New System.Drawing.Point(192, 23) Me.lbKind.Name = "lbKind" Me.lbKind.Size = New System.Drawing.Size(35, 12) Me.lbKind.TabIndex = 2 Me.lbKind.Text = "種別:" ' 'btnSearch ' Me.btnSearch.Location = New System.Drawing.Point(425, 18) Me.btnSearch.Name = "btnSearch" Me.btnSearch.Size = New System.Drawing.Size(75, 23) Me.btnSearch.TabIndex = 3 Me.btnSearch.Text = "検索" Me.btnSearch.UseVisualStyleBackColor = True ' 'txtName ' Me.txtName.Location = New System.Drawing.Point(53, 19) Me.txtName.Name = "txtName" Me.txtName.Size = New System.Drawing.Size(100, 19) Me.txtName.TabIndex = 4 ' 'cmbKind ' Me.cmbKind.FormattingEnabled = True Me.cmbKind.Location = New System.Drawing.Point(233, 19) Me.cmbKind.Name = "cmbKind" Me.cmbKind.Size = New System.Drawing.Size(121, 20) Me.cmbKind.TabIndex = 5 ' 'btnAdd ' Me.btnAdd.Location = New System.Drawing.Point(14, 318) Me.btnAdd.Name = "btnAdd" Me.btnAdd.Size = New System.Drawing.Size(75, 23) Me.btnAdd.TabIndex = 6 Me.btnAdd.Text = "追加" Me.btnAdd.UseVisualStyleBackColor = True ' 'btnUpdate ' Me.btnUpdate.Location = New System.Drawing.Point(95, 318) Me.btnUpdate.Name = "btnUpdate" Me.btnUpdate.Size = New System.Drawing.Size(75, 23) Me.btnUpdate.TabIndex = 6 Me.btnUpdate.Text = "更新" Me.btnUpdate.UseVisualStyleBackColor = True ' 'btnDelete ' Me.btnDelete.Location = New System.Drawing.Point(176, 318) Me.btnDelete.Name = "btnDelete" Me.btnDelete.Size = New System.Drawing.Size(75, 23) Me.btnDelete.TabIndex = 6 Me.btnDelete.Text = "削除" Me.btnDelete.UseVisualStyleBackColor = True ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(514, 353) Me.Controls.Add(Me.btnDelete) Me.Controls.Add(Me.btnUpdate) Me.Controls.Add(Me.btnAdd) Me.Controls.Add(Me.cmbKind) Me.Controls.Add(Me.txtName) Me.Controls.Add(Me.btnSearch) Me.Controls.Add(Me.lbKind) Me.Controls.Add(Me.lbName) Me.Controls.Add(Me.dgvCat) Me.Name = "Form1" Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.Text = "一覧" CType(Me.dgvCat, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) Me.PerformLayout() End Sub Friend WithEvents dgvCat As DataGridView Friend WithEvents lbName As Label Friend WithEvents lbKind As Label Friend WithEvents btnSearch As Button Friend WithEvents txtName As TextBox Friend WithEvents cmbKind As ComboBox Friend WithEvents ColNo As DataGridViewTextBoxColumn Friend WithEvents ColName As DataGridViewTextBoxColumn Friend WithEvents ColSex As DataGridViewTextBoxColumn Friend WithEvents ColAge As DataGridViewTextBoxColumn Friend WithEvents ColKind As DataGridViewTextBoxColumn Friend WithEvents ColRemark As DataGridViewTextBoxColumn Friend WithEvents btnAdd As Button Friend WithEvents btnUpdate As Button Friend WithEvents btnDelete As Button End Class </code></pre> <p> </p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="宣言の追加"><a href="#%E5%AE%A3%E8%A8%80%E3%81%AE%E8%BF%BD%E5%8A%A0">宣言の追加</a></h3> <p>ダウンロードしたパッケージを利用するための宣言を追加します。</p> <p>Form1.vb</p> <pre><code>Imports MySql.Data.MySqlClient </code></pre> <p> </p> <h3 id="初期表示処理の修正"><a href="#%E5%88%9D%E6%9C%9F%E8%A1%A8%E7%A4%BA%E5%87%A6%E7%90%86%E3%81%AE%E4%BF%AE%E6%AD%A3">初期表示処理の修正</a></h3> <p>Oracleに接続していた部分を MySQLに接続するように修正し、<br /> OracleCommand、OracleDataAdapterもそれぞれ MySQL用のクラスに変更します。</p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' フォームロード時の処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'Using conn As New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") Using conn As New MySqlConnection("Database=DB01;Data Source=localhost;User Id=USER01;Password=USER01; sqlservermode=True;") ' データベースオープン conn.Open() ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 'Dim cmd As OracleCommand = New OracleCommand("SELECT * FROM MSTKIND", conn) 'Dim da As OracleDataAdapter = New OracleDataAdapter(cmd) Dim cmd As MySqlCommand = New MySqlCommand("SELECT * FROM MSTKIND", conn) Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd) Dim dt As DataTable = New DataTable() da.Fill(dt) ' コンボボックスに値を設定 Dim sources As List(Of Kind) = New List(Of Kind) Dim k As Kind = New Kind() k.KindCd = "" k.KindName = "指定なし" sources.Add(k) For Each row As DataRow In dt.Rows k = New Kind() k.KindCd = row("KIND_CD").ToString() k.KindName = row("KIND_NAME").ToString() sources.Add(k) Next Me.cmbKind.DataSource = sources Me.cmbKind.DisplayMember = "KindName" ' データベースクローズ conn.Close() End Using End Sub </code></pre> <h3 id="検索処理の修正"><a href="#%E6%A4%9C%E7%B4%A2%E5%87%A6%E7%90%86%E3%81%AE%E4%BF%AE%E6%AD%A3">検索処理の修正</a></h3> <p>初期表示と同様、接続の処理とOracleのクラスをMysql用に変更します。</p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' 検索処理 ''' </summary> Private Sub search() 'Using conn As New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") Using conn As New MySqlConnection("Database=DB01;Data Source=localhost;User Id=USER01;Password=USER01; sqlservermode=True;") ' データベースオープン conn.Open() ' 検索条件を指定してデータを取得 Using con As New DataContext(conn) Dim searchName As String = txtName.Text Dim searchKind As String = CType(cmbKind.SelectedValue, Kind).KindCd ' 種別マスタ取得 ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 Dim cmd As MySqlCommand = New MySqlCommand("SELECT * FROM MSTKIND", conn) Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd) Dim dt As DataTable = New DataTable() da.Fill(dt) Dim kindList As List(Of Kind) = New List(Of Kind) Dim k As Kind = New Kind() For Each row As DataRow In dt.Rows k = New Kind() k.KindCd = row("KIND_CD").ToString() k.KindName = row("KIND_NAME").ToString() kindList.Add(k) Next ' 猫一覧取得 Dim Sql As String = "SELECT * FROM TBLCAT" Dim where As String = "" If (searchName <> "") Then where = " WHERE NAME LIKE '" + searchName + "%'" End If If (searchKind <> "") Then If (where <> "") Then where += " AND" Else where = " WHERE" End If where += " KIND_CD = '" + searchKind + "'" End If Sql += where cmd = New MySqlCommand(Sql, conn) da = New MySqlDataAdapter(cmd) dt = New DataTable() da.Fill(dt) ' データグリッドビューに設定 Dim i As Integer = 0 dgvCat.Rows.Clear() For i = 0 To dt.Rows.Count() - 1 ' 行追加 dgvCat.Rows.Add() ' No(プライマリなので編集不可) Dim no = New DataGridViewTextBoxCell() no.Value = dt.Rows(i)("No") dgvCat(0, i) = no dgvCat(0, i).ReadOnly = True ' 名前 Dim name = New DataGridViewTextBoxCell() name.Value = dt.Rows(i)("Name") dgvCat(1, i) = name ' 性別 Dim sex = New DataGridViewComboBoxCell() sex.Items.AddRange({"&#x2642;", "&#x2640;"}) sex.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(2, i) = sex dgvCat(2, i).Value = dt.Rows(i)("Sex") ' 年齢 Dim age = New DataGridViewTextBoxCell() age.Value = dt.Rows(i)("Age") dgvCat(3, i) = age ' 種別 Dim kind = New DataGridViewComboBoxCell() kind.DataSource = kindList kind.DisplayMember = "KindName" kind.ValueMember = "KindCd" kind.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(4, i) = kind dgvCat(4, i).Value = dt.Rows(i)("Kind_Cd") ' 好物 Dim favorite = New DataGridViewTextBoxCell() favorite.Value = dt.Rows(i)("Favorite") dgvCat(5, i) = favorite Next End Using ' データベースクローズ conn.Close() End Using End Sub </code></pre> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbMySQL1_005.jpg" alt="起動後の画面" /></p> <p>種別にデータが設定されました。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/01/VbMySQL1_006.jpg" alt="検索結果" /></p> <p>検索ボタン押下でデータがグリッドに表示されました。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>MySQLもOracle社のものになったからか、<br /> ほとんど変更無しで対応することができました。めでたし。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15464 2019-10-08T09:41:26+09:00 2019-10-08T09:41:26+09:00 https://crieit.net/posts/VB-NET-Oracle-5d9bdb36dc86b 【VB.NET】Oracleに接続してデータを操作(追加・更新・削除)してみる <p>引き続きVB.NET。</p> <p>プログラムは前回のものを参考にしてください。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/29/post-3579/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】Oracleに接続してデータを検索してみる</a></p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="更新処理"><a href="#%E6%9B%B4%E6%96%B0%E5%87%A6%E7%90%86">更新処理</a></h3> <pre><code> ''' <summary> ''' 更新ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click Using conn = New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") ' データベースオープン conn.Open() ' データ更新 For i = 0 To dgvCat.Rows.Count - 1 ' テーブルから対象のデータを取得 Dim no As Integer = dgvCat(0, i).Value ' シーケンス列としていないので、 ' 最初に件数を取得して No を計算する Dim cmd As OracleCommand = New OracleCommand("SELECT COUNT(*) FROM TBLCAT WHERE No = " + no, conn) Dim cnt As Decimal = cmd.ExecuteScalar() If (cnt = 0) Then ' データ追加 Dim query = "INSERT INTO TBLCAT VALUES (" + (cnt + 1) + ", '" + dgvCat(1, i).Value + "'" + ", '" + dgvCat(2, i).Value + "'" + ", " + dgvCat(3, i).Value + "'" + ", '" + dgvCat(4, i).Value + "'" + ", '" + dgvCat(5, i).Value + "')" cmd = New OracleCommand(query, conn) cmd.ExecuteNonQuery() Else ' データ変更 Dim query = "UPDATE TBLCAT SET" + " NAME = '" + dgvCat(1, i).Value + "'" + ", SEX = '" + dgvCat(2, i).Value + "'" + ", AGE = " + dgvCat(3, i).Value + ", KIND_CD = '" + dgvCat(4, i).Value + "'" + ", FAVORITE = '" + dgvCat(5, i).Value + "' " + "WHERE NO = " + dgvCat(0, i).Value cmd = New OracleCommand(query, conn) cmd.ExecuteNonQuery() End If Next conn.Close() End Using AddRowFlg = False ' データ再検索 search() MessageBox.Show("データを更新しました。") End Sub </code></pre> <h3 id="削除処理"><a href="#%E5%89%8A%E9%99%A4%E5%87%A6%E7%90%86">削除処理</a></h3> <pre><code> ''' <summary> ''' 削除ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click Using conn = New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") ' データベースオープン conn.Open() ' 選択されている行 For Each r As DataGridViewRow In dgvCat.SelectedRows Dim Cat As Cat = CType(dgvCat.DataSource(), List(Of Cat)).Item(r.Index) ' データ削除 Dim query As String = "DELETE FROM TBLCAT WHERE NO = " + Cat.No ' クエリ実行 Dim cmd As OracleCommand = New OracleCommand(query, conn) cmd.ExecuteNonQuery() Next conn.Close() End Using ' データ再検索 search() MessageBox.Show("データを削除しました。") End Sub </code></pre> <p> </p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>起動後の画面は、SQLiteの時と変わらないので割愛しました。</p> <p>次回以降は、一応他のDBもやっていこうかと思います。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15458 2019-10-07T09:43:37+09:00 2019-10-07T09:43:37+09:00 https://crieit.net/posts/VB-NET-Oracle 【VB.NET】Oracleに接続してデータを検索してみる <p>またVB.NETですが。<br /> WPFでもやりましたが Oracle に接続してとりあえずのことをやってみます。</p> <p>プログラムは前回のもの、データベースの作成なんかはWPFを参考にしてください。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/09/02/post-2322/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【WPF】Oracleを使ってデータを DataGrid に表示する</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/28/post-3569/" data-blogcard="1">【VB.NET】データグリッドビューの行を動的に追加する</a></p> <h2 id="参照の追加"><a href="#%E5%8F%82%E7%85%A7%E3%81%AE%E8%BF%BD%E5%8A%A0">参照の追加</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/ESP000001-1.jpg" alt="参照の追加" /></p> <p>ソリューション・エクスプローラーの「参照」を右クリックして「参照の追加」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/ESP000002-1.jpg" alt="dll の追加" /></p> <p>参照の追加画面が表示されるので、「参照」ボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/ESP000003-1.jpg" alt="dll の追加" /></p> <p>Oracle.DataAcess.dllを選択し、「追加」ボタンをクリックして完了です。</p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="宣言の追加"><a href="#%E5%AE%A3%E8%A8%80%E3%81%AE%E8%BF%BD%E5%8A%A0">宣言の追加</a></h3> <p>下記の記述を追加します。</p> <pre><code>Imports System.Data Imports System.Data.OracleClient </code></pre> <h3 id="起動時の処理"><a href="#%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AE%E5%87%A6%E7%90%86">起動時の処理</a></h3> <pre><code> ''' <summary> ''' フォームロード時の処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Using conn As New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") ' データベースオープン conn.Open() ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 Dim cmd As OracleCommand = New OracleCommand("SELECT * FROM MSTKIND", conn) Dim da As OracleDataAdapter = New OracleDataAdapter(cmd) Dim dt As DataTable = New DataTable() da.Fill(dt) ' コンボボックスに値を設定 Dim sources As List(Of Kind) = New List(Of Kind) Dim k As Kind = New Kind() k.KindCd = "" k.KindName = "指定なし" sources.Add(k) For Each row As DataRow In dt.Rows k = New Kind() k.KindCd = row("KIND_CD").ToString() k.KindName = row("KIND_NAME").ToString() sources.Add(k) Next Me.cmbKind.DataSource = sources Me.cmbKind.DisplayMember = "KindName" ' データベースクローズ conn.Close() End Using End Sub </code></pre> <h3 id="検索処理"><a href="#%E6%A4%9C%E7%B4%A2%E5%87%A6%E7%90%86">検索処理</a></h3> <pre><code> ''' <summary> ''' 検索処理 ''' </summary> Private Sub search() Using conn As New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") ' データベースオープン conn.Open() ' 検索条件を指定してデータを取得 Using con As New DataContext(conn) Dim searchName As String = txtName.Text Dim searchKind As String = CType(cmbKind.SelectedValue, Kind).KindCd ' 種別マスタ取得 ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 Dim cmd As OracleCommand = New OracleCommand("SELECT * FROM MSTKIND", conn) Dim da As OracleDataAdapter = New OracleDataAdapter(cmd) Dim dt As DataTable = New DataTable() da.Fill(dt) Dim kindList As List(Of Kind) = New List(Of Kind) Dim k As Kind = New Kind() For Each row As DataRow In dt.Rows k = New Kind() k.KindCd = row("KIND_CD").ToString() k.KindName = row("KIND_NAME").ToString() kindList.Add(k) Next ' 猫一覧取得 Dim Sql As String = "SELECT * FROM TBLCAT" Dim where As String = "" If (searchName <> "") Then where = " WHERE NAME LIKE '" + searchName + "%'" End If If (searchKind <> "") Then If (where <> "") Then where += " AND" Else where = " WHERE" End If where += " KIND_CD = '" + searchKind + "'" End If Sql += where cmd = New OracleCommand(Sql, conn) da = New OracleDataAdapter(cmd) dt = New DataTable() da.Fill(dt) ' データグリッドビューに設定 Dim i As Integer = 0 dgvCat.Rows.Clear() For i = 0 To dt.Rows.Count() - 1 ' 行追加 dgvCat.Rows.Add() ' No(プライマリなので編集不可) Dim no = New DataGridViewTextBoxCell() no.Value = dt.Rows(i)("No") dgvCat(0, i) = no dgvCat(0, i).ReadOnly = True ' 名前 Dim name = New DataGridViewTextBoxCell() name.Value = dt.Rows(i)("Name") dgvCat(1, i) = name ' 性別 Dim sex = New DataGridViewComboBoxCell() sex.Items.AddRange({"♂", "♀"}) sex.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(2, i) = sex dgvCat(2, i).Value = dt.Rows(i)("Sex") ' 年齢 Dim age = New DataGridViewTextBoxCell() age.Value = dt.Rows(i)("Age") dgvCat(3, i) = age ' 種別 Dim kind = New DataGridViewComboBoxCell() kind.DataSource = kindList kind.DisplayMember = "KindName" kind.ValueMember = "KindCd" kind.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(4, i) = kind dgvCat(4, i).Value = dt.Rows(i)("Kind_Cd") ' 好物 Dim favorite = New DataGridViewTextBoxCell() favorite.Value = dt.Rows(i)("Favorite") dgvCat(5, i) = favorite Next End Using ' データベースクローズ conn.Close() End Using End Sub </code></pre> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>ちょっと画面は取り忘れましたが、これでOracleからデータ取得、表示ができます。</p> <p>次回もOracleの予定です。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15448 2019-10-03T09:28:32+09:00 2019-10-03T09:28:32+09:00 https://crieit.net/posts/VB-NET-DataGridView-5d9540b08ea4f 【VB.NET】DataGridView の行を動的に追加してみる <p>引き続き、DataGridView関連の話し。<br /> 今回は行を動的に追加する方法を試してみてました。</p> <p>プログラムは前回のものを流用します。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/27/post-3564/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】DataGridView を直接変更してデータを更新してみる</a></p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="追加処理"><a href="#%E8%BF%BD%E5%8A%A0%E5%87%A6%E7%90%86">追加処理</a></h3> <p>追加ボタンが押されたタイミングで、データグリッドビューの空行を作成して追加します。</p> <p>今回は、1行追加したら「更新」するまで追加できないようにしました。<br /> (グローバルでフラグを持たせています)</p> <pre><code> ''' <summary> ''' 追加ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click ' 追加後に更新されていなければ処理しない If (AddRowFlg) Then Return End If AddRowFlg = True Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' データ追加 Using con As New DataContext(conn) Dim idx = dgvCat.Rows.Count() ' 行追加 dgvCat.Rows.Add() ' 種別マスタ取得 Dim kinds As Table(Of Kind) = con.GetTable(Of Kind) Dim kindResult As IQueryable(Of Kind) = From x In kinds Order By x.KindCd Select x Dim kindList = kindResult.ToList() ' 猫一覧取得 Dim tblCat As Table(Of Cat) = con.GetTable(Of Cat) Dim newNo = 0 ' 使用できるNoを判定 For i As Integer = 1 To tblCat.ToList().Count() + 1 Dim selectNo = i If tblCat.SingleOrDefault(Function(x As Cat) x.No = selectNo) Is Nothing Then newNo = selectNo End If Next ' No(プライマリなので編集不可) Dim no = New DataGridViewTextBoxCell() no.Value = newNo dgvCat(0, idx) = no dgvCat(0, idx).ReadOnly = True ' 名前 Dim name = New DataGridViewTextBoxCell() dgvCat(1, idx) = name ' 性別 Dim sex = New DataGridViewComboBoxCell() sex.Items.AddRange({"&#x2642;", "&#x2640;"}) sex.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(2, idx) = sex ' 年齢 Dim age = New DataGridViewTextBoxCell() dgvCat(3, idx) = age ' 種別 Dim kind = New DataGridViewComboBoxCell() kind.DataSource = kindList kind.DisplayMember = "KindName" kind.ValueMember = "KindCd" kind.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(4, idx) = kind ' 好物 Dim favorite = New DataGridViewTextBoxCell() dgvCat(5, idx) = favorite End Using conn.Close() End Using End Sub </code></pre> <h3 id="更新処理"><a href="#%E6%9B%B4%E6%96%B0%E5%87%A6%E7%90%86">更新処理</a></h3> <p>更新処理では、データグリッドビューから直接値を取得して、データベースに存在しなければ追加、存在すれば更新というようにしました。</p> <pre><code> ''' <summary> ''' 更新ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' データ更新 Using con As New DataContext(conn) ' 対象のテーブルオブジェクトを取得 Dim Table = con.GetTable(Of Cat) ' 選択されているデータを取得 For i = 0 To dgvCat.Rows.Count - 1 ' テーブルから対象のデータを取得 Dim no As Integer = dgvCat(0, i).Value Dim target As Cat = Table.SingleOrDefault(Function(x As Cat) x.No = no) If (target Is Nothing) Then ' データ作成 Dim Cat As New Cat() Cat.No = dgvCat(0, i).Value Cat.Name = dgvCat(1, i).Value Cat.Sex = dgvCat(2, i).Value Cat.Age = dgvCat(3, i).Value Cat.KindCd = dgvCat(4, i).Value Cat.Favorite = dgvCat(5, i).Value Table.InsertOnSubmit(Cat) Else ' データ変更 target.Name = dgvCat(1, i).Value target.Sex = dgvCat(2, i).Value target.Age = dgvCat(3, i).Value target.KindCd = dgvCat(4, i).Value target.Favorite = dgvCat(5, i).Value End If ' DBの変更を確定 con.SubmitChanges() Next End Using conn.Close() End Using AddRowFlg = False ' データ再検索 search() MessageBox.Show("データを更新しました。") End Sub </code></pre> <p> </p> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite5_000.jpg" alt="検索後" /></p> <p>とりあえず検索します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite5_001.jpg" alt="追加ボタンクリック" /></p> <p>追加ボタンをクリックすると空行が追加されます。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite5_002.jpg" alt="データを入力" /></p> <p>追加された行に値を設定します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite5_003.jpg" alt="更新ボタンをクリック" /></p> <p>更新ボタンをクリック、再検索後の画面が表示されます。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>年の瀬となり忙しくなってまいりましたが<br /> なんとか更新していきたいと思います。</p> <p>次回はどうしようかな。。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15446 2019-10-02T09:28:19+09:00 2019-10-02T09:28:19+09:00 https://crieit.net/posts/VB-NET-DataGridView 【VB.NET】DataGridView を直接変更してデータを更新してみる <p>今回は、データグリッドビューの内容を直接編集してデータを更新したいと思います。</p> <p>プログラムは例によって前回のものを。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/24/post-3541/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】SQLiteに接続してデータを登録してみる</a></p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="検索処理"><a href="#%E6%A4%9C%E7%B4%A2%E5%87%A6%E7%90%86">検索処理</a></h3> <p>取得したデータを走査して1行ずつ作成していくように変更します。</p> <pre><code> ''' <summary> ''' 検索処理 ''' </summary> Private Sub search() Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' 検索条件を指定してデータを取得 Using con As New DataContext(conn) Dim searchName As String = txtName.Text Dim searchKind As String = CType(cmbKind.SelectedValue, Kind).KindCd ' 種別マスタ取得 Dim kinds As Table(Of Kind) = con.GetTable(Of Kind) Dim kindResult As IQueryable(Of Kind) = From x In kinds Order By x.KindCd Select x Dim kindList = kindResult.ToList() ' 猫一覧取得 Dim tblCat As Table(Of Cat) = con.GetTable(Of Cat) Dim result As IQueryable(Of Cat) If (searchKind = "") Then ' 種別が選択されていなければ名前のみ前方一致指定 result = From x In tblCat Where x.Name.StartsWith(searchName) Order By x.No Select x Else ' 種別が選択されていれば名前+種別で検索 result = From x In tblCat Where x.Name.StartsWith(searchName) &amp; x.KindCd = searchKind Order By x.No Select x End If ' データグリッドビューに設定 'dgvCat.DataSource = result.ToList() Dim list As List(Of Cat) = result.ToList() Dim i As Integer = 0 dgvCat.Rows.Clear() For i = 0 To list.Count() - 1 Dim cat = list(i) ' 行追加 dgvCat.Rows.Add() ' No(プライマリなので編集不可) Dim no = New DataGridViewTextBoxCell() no.Value = cat.No dgvCat(0, i) = no dgvCat(0, i).ReadOnly = True ' 名前 Dim name = New DataGridViewTextBoxCell() name.Value = cat.Name dgvCat(1, i) = name ' 性別 Dim sex = New DataGridViewComboBoxCell() sex.Items.AddRange({"♂", "♀"}) sex.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(2, i) = sex dgvCat(2, i).Value = cat.Sex ' 年齢 Dim age = New DataGridViewTextBoxCell() age.Value = cat.Age dgvCat(3, i) = age ' 種別 Dim kind = New DataGridViewComboBoxCell() kind.DataSource = kindList kind.DisplayMember = "KindName" kind.ValueMember = "KindCd" kind.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(4, i) = kind dgvCat(4, i).Value = cat.KindCd ' 好物 Dim favorite = New DataGridViewTextBoxCell() favorite.Value = cat.Favorite dgvCat(5, i) = favorite Next End Using ' データベースクローズ conn.Close() End Using End Sub </code></pre> <p> </p> <h3 id="更新処理"><a href="#%E6%9B%B4%E6%96%B0%E5%87%A6%E7%90%86">更新処理</a></h3> <p>データグリッドビューに表示されているデータを全て更新するように変更します。</p> <pre><code> ''' <summary> ''' 更新ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' データ更新 Using con As New DataContext(conn) ' 対象のテーブルオブジェクトを取得 Dim Table = con.GetTable(Of Cat) ' 選択されているデータを取得 For i = 0 To dgvCat.Rows.Count - 1 ' テーブルから対象のデータを取得 Dim no As Integer = dgvCat(0, i).Value Dim target As Cat = Table.Single(Function(x As Cat) x.No = no) ' データ変更 target.Name = dgvCat(1, i).Value target.Sex = dgvCat(2, i).Value target.Age = dgvCat(3, i).Value target.KindCd = dgvCat(4, i).Value target.Favorite = dgvCat(5, i).Value ' DBの変更を確定 con.SubmitChanges() Next End Using conn.Close() End Using ' データ再検索 search() MessageBox.Show("データを更新しました。") End Sub </code></pre> <h3 id="コンボボックスの制御"><a href="#%E3%82%B3%E3%83%B3%E3%83%9C%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AE%E5%88%B6%E5%BE%A1">コンボボックスの制御</a></h3> <p>以前の記事でもやりましたが、<br /> コンボボックスがワンクリックで開くように仕込みを入れます。</p> <pre><code> ''' <summary> ''' データグリッドビューセルクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dgvCat_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvCat.CellClick Dim dgv As DataGridView = CType(sender, DataGridView) gridComboHandle(dgv, e) End Sub ''' <summary> ''' データグリッドビューのコンボボックス制御 ''' </summary> ''' <param name="dgv"></param> ''' <param name="e"></param> Private Sub gridComboHandle(dgv As DataGridView, e As DataGridViewCellEventArgs) ' 対象の列だった場合 If dgv.Columns(e.ColumnIndex).Name = "ColSex" Or dgv.Columns(e.ColumnIndex).Name = "ColKind" Then SendKeys.SendWait("{F4}") End If End Sub </code></pre> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite4_000.jpg" alt="データ検索後" /></p> <p>データ検索後の画面。<br /> 無事にデータが表示され、データグリッドビューにコンボボックスも表示されています。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite4_001.jpg" alt="データ変更" /></p> <p>1行目の種別を変更して、「更新」ボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite4_002.jpg" alt="データ変更後" /></p> <p>無事に変更できました。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>やり方としてはいまいちで、WPFみたいにMVVMとかバインディングとかできるかと思いますが、これはこれでもしかしたら需要があるかもしれません。</p> <p>次回は追加処理をしてみます。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15439 2019-09-30T09:58:53+09:00 2019-09-30T09:58:53+09:00 https://crieit.net/posts/VB-NET-SQLite-5d91534d804b7 【VB.NET】SQLiteに接続してデータを登録してみる <p>VBでSQLite、データ検索までしたので続いて登録、更新、削除をしてみました。<br /> C#からの移植ではありますが、微妙に違うところもありますね。</p> <p>プログラムは前回のものを流用します。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/22/post-3533/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】SQLiteからデータを取得して表示する</a></p> <h2 id="画面の修正"><a href="#%E7%94%BB%E9%9D%A2%E3%81%AE%E4%BF%AE%E6%AD%A3">画面の修正</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite3_000-1.jpg" alt="ボタンの追加" /></p> <p>画面に追加、更新、削除ボタンを追加し、それぞれにクリックイベントを設定します。</p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="検索処理の修正"><a href="#%E6%A4%9C%E7%B4%A2%E5%87%A6%E7%90%86%E3%81%AE%E4%BF%AE%E6%AD%A3">検索処理の修正</a></h3> <p>追加更新削除後に再検索するため、別メソッドに切り出します。</p> <pre><code> ''' <summary> ''' 検索ボタンクリックイベント. ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click search() End Sub ''' <summary> ''' 検索処理 ''' </summary> Private Sub search() Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' 検索条件を指定してデータを取得 Using con As New DataContext(conn) Dim searchName As String = txtName.Text Dim searchKind As String = CType(cmbKind.SelectedValue, Kind).KindCd Dim tblCat As Table(Of Cat) = con.GetTable(Of Cat) Dim result As IQueryable(Of Cat) If (searchKind = "") Then ' 種別が選択されていなければ名前のみ前方一致指定 result = From x In tblCat Where x.Name.StartsWith(searchName) Order By x.No Select x Else ' 種別が選択されていれば名前+種別で検索 result = From x In tblCat Where x.Name.StartsWith(searchName) &amp; x.KindCd = searchKind Order By x.No Select x End If ' データグリッドビューに設定 dgvCat.DataSource = result.ToList() End Using ' データベースクローズ conn.Close() End Using End Sub </code></pre> <h3 id="データ追加"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E8%BF%BD%E5%8A%A0">データ追加</a></h3> <pre><code> ''' <summary> ''' 追加ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' データ追加 Using con As New DataContext(conn) ' 対象のテーブルオブジェクトを取得 Dim Table = con.GetTable(Of Cat) ' データ作成 Dim Cat As New Cat() Cat.No = 5 Cat.Name = "こなつ" Cat.Sex = "&#x2640;" Cat.Age = 7 Cat.KindCd = "01" Cat.Favorite = "布団" ' データ追加 Table.InsertOnSubmit(Cat) ' DBの変更を確定 con.SubmitChanges() End Using conn.Close() End Using ' データ再検索 search() MessageBox.Show("データを追加しました。") End Sub </code></pre> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite3_003.jpg" alt="データ追加" /></p> <p>追加ボタンをクリックすると、固定ではありますがデータが追加されます。</p> <h3 id="データ更新"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E6%9B%B4%E6%96%B0">データ更新</a></h3> <pre><code> ''' <summary> ''' 更新ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' データ更新 Using con As New DataContext(conn) ' 対象のテーブルオブジェクトを取得 Dim Table = con.GetTable(Of Cat) ' 選択されているデータを取得 For Each r As DataGridViewRow In dgvCat.SelectedRows Dim Cat As Cat = CType(dgvCat.DataSource(), List(Of Cat)).Item(r.Index) ' テーブルから対象のデータを取得 Dim target As Cat = Table.Single(Function(x As Cat) x.No = Cat.No) ' データ変更 target.Favorite = "高いところ" ' DBの変更を確定 con.SubmitChanges() Next End Using conn.Close() End Using ' データ再検索 search() MessageBox.Show("データを更新しました。") End Sub </code></pre> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite3_004.jpg" alt="データ修正" /></p> <p>更新ボタンをクリックすると、選択された行の好物が更新されます。</p> <h3 id="データ削除"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E5%89%8A%E9%99%A4">データ削除</a></h3> <pre><code> ''' <summary> ''' 削除ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' データ削除 Using con As New DataContext(conn) ' 対象のテーブルオブジェクトを取得 Dim Table = con.GetTable(Of Cat) ' 選択されているデータを取得 For Each r As DataGridViewRow In dgvCat.SelectedRows Dim Cat As Cat = CType(dgvCat.DataSource(), List(Of Cat)).Item(r.Index) ' テーブルから対象のデータを取得 Dim target As Cat = Table.Single(Function(x As Cat) x.No = Cat.No) ' データ削除 Table.DeleteOnSubmit(target) ' DBの変更を確定 con.SubmitChanges() Next End Using conn.Close() End Using ' データ再検索 search() MessageBox.Show("データを削除しました。") End Sub </code></pre> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite3_005.jpg" alt="データ削除" /></p> <p>削除ボタンをクリックすると、選択されている行のデータが削除されます。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>とりあえず簡単ではありますが追加、更新、削除ができました。</p> <p>次回はデータグリッドを直接編集してデータの更新等が行えるようにしたいと思います。</p> <p>ではでは。</p> <p> </p> doraxdora tag:crieit.net,2005:PublicArticle/15429 2019-09-27T13:09:52+09:00 2019-09-27T13:09:52+09:00 https://crieit.net/posts/VB-NET-SQLite-5d8d8b90b1414 【VB.NET】SQLiteに接続してデータを取得してみる <p>今回はデータベースから取得したデータを表示したいと思います。</p> <p>プログラムは前回のものを流用します。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/21/post-3519/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】SQLiteのデータベース及びテーブルを動的に作成してみる</a></p> <h2 id="データの追加"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E8%BF%BD%E5%8A%A0">データの追加</a></h2> <p>前回作成したテーブルにデータをツール、もしくはコマンドラインから追加します。</p> <pre><code> INSERT INTO MSTKIND VALUES ("01", "キジトラ"); INSERT INTO MSTKIND VALUES ("02", "長毛種(不明)"); INSERT INTO MSTKIND VALUES ("03", "ミケ(っぽい)"); INSERT INTO MSTKIND VALUES ("04", "サビ"); INSERT INTO MSTKIND VALUES ("09", "その他"); INSERT INTO TBLCAT VALUES('1','そら','♂','6','01','犬の人形'); INSERT INTO TBLCAT VALUES('2','りく','♂','5','02','人間'); INSERT INTO TBLCAT VALUES('3','うみ','♀','4','03','高級ウェットフード'); INSERT INTO TBLCAT VALUES('4','こうめ','♀','2','04','横取りフード'); </code></pre> <p>追加したデータを確認します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite2_001.jpg" alt="A5m2SQLで確認" /></p> <h2 id="Linq で データを取得、設定する"><a href="#Linq+%E3%81%A7+%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%80%81%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B">Linq で データを取得、設定する</a></h2> <h3 id="参照の追加"><a href="#%E5%8F%82%E7%85%A7%E3%81%AE%E8%BF%BD%E5%8A%A0">参照の追加</a></h3> <p>ソリューション・エクスプローラーからプロジェクトの「参照」を右クリックし、「参照の追加」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite2_000-1.jpg" alt="参照の追加" /></p> <p>「System.Data.Linq」で検索、チェックしてOKボタンをクリックします。</p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="インポート宣言の追加"><a href="#%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E5%AE%A3%E8%A8%80%E3%81%AE%E8%BF%BD%E5%8A%A0">インポート宣言の追加</a></h3> <p>次の記述を先頭に追加します。</p> <pre><code> Imports System.Data.Linq </code></pre> <h3 id="フォームロード時にコンボボックスにデータを設定する"><a href="#%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%AD%E3%83%BC%E3%83%89%E6%99%82%E3%81%AB%E3%82%B3%E3%83%B3%E3%83%9C%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B">フォームロード時にコンボボックスにデータを設定する</a></h3> <p>次の記述をフォームロード時のイベントメソッドに追加します。</p> <pre><code> ' 種別コンボボックスの内容をデータベースから取得して設定 Using con As New DataContext(conn) Dim kinds As Table(Of Kind) = con.GetTable(Of Kind) Dim result As IQueryable(Of Kind) = From x In kinds Order By x.KindCd Select x Dim empty As New Kind() empty.KindCd = "" empty.KindName = "指定なし" Dim list = result.ToList() list.Insert(0, empty) ' コンボボックスに設定 cmbKind.DataSource = list cmbKind.DisplayMember = "kindName" End Using </code></pre> <h3 id="検索ボタンのクリックイベント追加"><a href="#%E6%A4%9C%E7%B4%A2%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%AE%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E8%BF%BD%E5%8A%A0">検索ボタンのクリックイベント追加</a></h3> <p>デザイナー画面にて配置した「検索」ボタンをダブルクリックします。</p> <p>検索処理の実装</p> <p>自動生成されたメソッドに次の処理を記述します。</p> <pre><code> ''' <summary> ''' 検索ボタンクリックイベント. ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' 検索条件を指定してデータを取得 Using con As New DataContext(conn) Dim searchName As String = txtName.Text Dim searchKind As String = CType(cmbKind.SelectedValue, Kind).KindCd Dim tblCat As Table(Of Cat) = con.GetTable(Of Cat) Dim result As IQueryable(Of Cat) If (searchKind = "") Then ' 種別が選択されていなければ名前のみ前方一致指定 result = From x In tblCat Where x.Name.StartsWith(searchName) Order By x.No Select x Else ' 種別が選択されていれば名前+種別で検索 result = From x In tblCat Where x.Name.StartsWith(searchName) &amp; x.KindCd = searchKind Order By x.No Select x End If ' データグリッドビューに設定 dgvCat.DataSource = result.ToList() End Using ' データベースクローズ conn.Close() End Using End Sub </code></pre> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite009-1.jpg" alt="起動後の画面" /></p> <p>起動後の画面。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite010.jpg" alt="コンボボックスにデータ設定" /></p> <p>コンボボックスに無事にデータが設定されました。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite2_003.jpg" alt="検索した結果" /></p> <p>検索ボタンをクリックして、データグリッドビューにも無事にデータが表示されました。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>C#とほぼ同じなので難しくはないですね。</p> <p>次回はデータの追加・更新・削除なんかもやってみます。</p> <p>ではでは。</p> <p> </p> doraxdora tag:crieit.net,2005:PublicArticle/15423 2019-09-25T09:35:38+09:00 2019-09-25T09:35:38+09:00 https://crieit.net/posts/VB-NET-SQLite 【VB.NET】SQLiteのデータベース及びテーブルを動的に作成してみる <p>今回はSQLiteを使ったプログラムを作っていきます。</p> <p>プログラムは前回のものを流用しませんが、WPFのものを移植する感じになります。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/06/09/post-1184/" target="_blank" rel="noopener noreferrer">【WPF】SQLiteを使ってデータを DataGrid に表示してみる</a></p> <h2 id="SQLiteのパッケージをインストール"><a href="#SQLite%E3%81%AE%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">SQLiteのパッケージをインストール</a></h2> <p>SQLite を利用するためのパッケージをインストールします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite000.jpg" alt="NuGetパッケージ管理" /></p> <p>ソリューションエクスプローラーからプロジェクトを選択、右クリックし「Nuget パッケージの管理」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite001.jpg" alt="パッケージの追加" /></p> <p>Nuget パッケージ管理画面が表示されるので、検索窓に「SQLite」を入力し「System.Data.SQLite」を選択、インストールボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite002.jpg" alt="確認ダイアログ" /></p> <p>変更の確認ダイアログが表示されるので、「OK」ボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite003.jpg" alt="出力ビュー" /></p> <p>出力ビューに「終了」が出力されればOKです。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite004.jpg" alt="ソリューションエクスプローラー" /></p> <p>ソリューションエクスプローラーの「参照」を開くと「System.Data.*」が追加されていることが確認できます。</p> <h2 id="ビルドを実行する"><a href="#%E3%83%93%E3%83%AB%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B">ビルドを実行する</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite005.jpg" alt="リビルドの実行" /></p> <p>上部メニューの「ビルド」>「ソリューションのリビルド」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite006.jpg" alt="ファイルが出力される" /></p> <p>プロジェクトのディレクトリ>bin>Target>x86 、x64 に「SQLite.Interop.dll」が出力されていることが確認できます。</p> <h2 id="プログラム修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E4%BF%AE%E6%AD%A3">プログラム修正</a></h2> <h3 id="ロードイベントの追加"><a href="#%E3%83%AD%E3%83%BC%E3%83%89%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E8%BF%BD%E5%8A%A0">ロードイベントの追加</a></h3> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite007.jpg" alt="フォームのプロパティ" /></p> <p>デザイナー画面を開き、フォームを選択した状態でプロパティウィンドウの「Load」欄をダブルクリックします。</p> <p>次のようにプログラムが自動生成されます。</p> <p>Form1.vb</p> <pre><code> Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub End Class </code></pre> <h3 id="フォームロード時にテーブルを作成する"><a href="#%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%AD%E3%83%BC%E3%83%89%E6%99%82%E3%81%AB%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B">フォームロード時にテーブルを作成する</a></h3> <p>フォームロード(アプリケーション起動時)に、テーブルを作成するようにプログラムを修正、<br /> 先程追加したイベントに次の処理を記述します。</p> <p>Form1.vb</p> <pre><code> Imports System.Data.SQLite Public Class Form1 ''' <summary> ''' フォームロード時の処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite") ' データベースオープン conn.Open() ' テーブルが存在しなければ作成 Using command = conn.CreateCommand() Dim sb As New System.Text.StringBuilder() sb.Append("CREATE TABLE IF NOT EXISTS MSTKIND (") sb.Append(" KIND_CD NCHAR NOT NULL") sb.Append(" , KIND_NAME NVARCHAR") sb.Append(" , primary key (KIND_CD)") sb.Append(")") command.CommandText = sb.ToString() command.ExecuteNonQuery() sb.Clear() sb.Append("CREATE TABLE IF NOT EXISTS TBLCAT (") sb.Append(" NO INT NOT NULL") sb.Append(" , NAME NVARCHAR NOT NULL") sb.Append(" , SEX NVARCHAR NOT NULL") sb.Append(" , AGE INT DEFAULT 0 NOT NULL") sb.Append(" , KIND_CD NCHAR DEFAULT 0 NOT NULL") sb.Append(" , FAVORITE NVARCHAR") sb.Append(" , primary key (NO)") sb.Append(")") command.CommandText = sb.ToString() command.ExecuteNonQuery() End Using ' データベースクローズ conn.Close() End Using End Sub End Class </code></pre> <h2 id="アプリケーションの実行"><a href="#%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%AE%9F%E8%A1%8C">アプリケーションの実行</a></h2> <p>上部メニューの開始ボタンをクリックし、アプリケーションを実行すると「MSTKIND」、「TBLCAT」テーブルが作成されます。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbSQLite008.jpg" alt="A5m2で確認" /></p> <p>A5m2などを使って確認をしてください。</p> <p>以上でひとまず完了です。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>少し長くなったのでここまにして続きは次回にします。</p> <p>次回はコンボボックス、データグリッドにデータベースから取得したデータを表示したいと思います。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15411 2019-09-20T09:23:00+09:00 2019-09-20T09:23:00+09:00 https://crieit.net/posts/VB-NET-5d841be41e23c 【VB.NET】データグリッドビューでチェックされた行の背景色を変更する <p>引き続きVB.NETの話し。<br /> せっかくチェックボックスにイベントを仕込んだのでそれをトリガーにして背景色を変更する処理を実装したいと思います。</p> <p>プログラムは下記のものを流用します。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/19/post-3494/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】データグリッドビューで行毎のチェックボックスにイベントを仕込む</a>## プログラムの修正</p> <h3 id="背景色の定義を追加"><a href="#%E8%83%8C%E6%99%AF%E8%89%B2%E3%81%AE%E5%AE%9A%E7%BE%A9%E3%82%92%E8%BF%BD%E5%8A%A0">背景色の定義を追加</a></h3> <p>グローバルの定数として背景色を定義します。</p> <p>Form1.vb</p> <pre><code> ' 通常時の背景色 Private Const BG_NORMAL = "#FFFFFF" ' 強調時の背景色 Private Const BG_HIGHLIGHT = "#FFE7E7" ' 選択時の背景色 Private Const BG_SELECTED = "#EF9A94" </code></pre> <h3 id="既存処理の修正"><a href="#%E6%97%A2%E5%AD%98%E5%87%A6%E7%90%86%E3%81%AE%E4%BF%AE%E6%AD%A3">既存処理の修正</a></h3> <p>データグリッドビューのセル値が変更(が確定)された際のイベントで背景色を変更します。</p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' データグリッドビューのセル値が変更(が確定)された際のイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dgv_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellValueChanged If (TypeOf dgv(e.ColumnIndex, e.RowIndex) Is DataGridViewCheckBoxCell) Then Dim chk As DataGridViewCheckBoxCell = dgv(e.ColumnIndex, e.RowIndex) Dim dgs = New DataGridViewCellStyle() If (chk.Value = True) Then dgs.BackColor = System.Drawing.ColorTranslator.FromHtml(BG_SELECTED) Else dgs.BackColor = System.Drawing.ColorTranslator.FromHtml(BG_NORMAL) End If dgv.Rows(e.RowIndex).DefaultCellStyle = dgs End If End Sub </code></pre> <h3 id="新規イベントの追加"><a href="#%E6%96%B0%E8%A6%8F%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E8%BF%BD%E5%8A%A0">新規イベントの追加</a></h3> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridCheck2_000.jpg" alt="新規イベントの追加" /></p> <p>CellMouseEnter、CellMouseLeaveの2つを追加します。</p> <p>マウスオーバーした際に背景色を変更して強調します。</p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' データグリッドビューのセルにマウスポインターがフォーカスした際のイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dgv_CellMouseEnter(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellMouseEnter ' ヘッダーは処理しない If e.ColumnIndex >= 0 And e.RowIndex >= 0 Then Dim dgv As DataGridView = CType(sender, DataGridView) ' 背景色を変更する dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = System.Drawing.ColorTranslator.FromHtml(BG_HIGHLIGHT) End If End Sub ''' <summary> ''' データグリッドビューのセルからマウスポインターがフォーカスアウトした際のイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dgv_CellMouseLeave(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellMouseLeave ' ヘッダーは処理しない If e.ColumnIndex >= 0 And e.RowIndex >= 0 Then Dim dgv As DataGridView = CType(sender, DataGridView) If (dgv(0, e.RowIndex).Value) Then ' 選択された状態に戻す dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = System.Drawing.ColorTranslator.FromHtml(BG_SELECTED) Else ' 背景色を戻す dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = System.Drawing.ColorTranslator.FromHtml(BG_NORMAL) End If End If End Sub </code></pre> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridCheck2_001.jpg" alt="マウスオーバーでの強調表示" /></p> <p>マウスポインターがある行が強調表示されます。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridCheck2_002.jpg" alt="チェックで強調表示" /></p> <p>チェックすると選択された行の背景色が変わります。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridCheck2_003.jpg" alt="両方" /></p> <p>無事にマウスオーバーで強調表示、チェックボックスにチェックで選択表示ができました。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>C#と同様、VB.NETでも色々な事ができそうです。<br /> せっかくなので、この後はまたデータベースからデータをひっぱってきたりってのをやろうかと思います。</p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15393 2019-09-13T09:40:08+09:00 2019-09-13T09:40:08+09:00 https://crieit.net/posts/VB-NET-5d7ae568f1244 【VB.NET】データグリッドビューで行毎のチェックボックスにイベントを仕込む <p>今回は、データグリッドに配置したチェックボックス列にイベントを仕込みたいと思います。</p> <p>プログラムは前回のものを流用。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/15/post-3456/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】データグリッドビューで行毎のコンボボックスにイベントを仕込む</a></p> <h2 id="プログラムの修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E4%BF%AE%E6%AD%A3">プログラムの修正</a></h2> <h3 id="新規イベントの追加"><a href="#%E6%96%B0%E8%A6%8F%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E8%BF%BD%E5%8A%A0">新規イベントの追加</a></h3> <p>データグリッドビューの現在のセル状態が変更された際のイベントを追加します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridCheck000.jpg" alt="新規イベントの追加①" /></p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' データグリッドビューの現在のセル状態が変更された際のイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dgv_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles dgv.CurrentCellDirtyStateChanged ' 対象のセルを判定 If dgv.CurrentCellAddress.X = 0 AndAlso dgv.IsCurrentCellDirty Then ' 変更を確定する dgv.CommitEdit(DataGridViewDataErrorContexts.Commit) End If End Sub </code></pre> <p> </p> <p>データグリッドビューのセル値が変更された際のイベントを追加</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridCheck001.jpg" alt="新規イベントの追加②" /></p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' データグリッドビューのセル値が変更(が確定)された際のイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dgv_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellValueChanged If (TypeOf dgv(e.ColumnIndex, e.RowIndex) Is DataGridViewCheckBoxCell) Then Dim chk As DataGridViewCheckBoxCell = dgv(e.ColumnIndex, e.RowIndex) MessageBox.Show(e.RowIndex + 1 &amp; "行目のチェックボックス値:" &amp; chk.Value) End If End Sub </code></pre> <p> </p> <p>データグリッドビューのセルがクリック(マウスダウン)された際のイベントを追加</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridCheck002.jpg" alt="新規イベントの追加③" /></p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' データグリッドビューのセルをクリック(マウスダウン)した際のイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dgv_CellMouseDown(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgv.CellMouseDown If (TypeOf dgv(e.ColumnIndex, e.RowIndex) Is DataGridViewCheckBoxCell) Then Dim cell As DataGridViewCheckBoxCell = dgv(e.ColumnIndex, e.RowIndex) cell.Value = If(cell.Value = False, True, False) ' 変更を確定する dgv.CommitEdit(DataGridViewDataErrorContexts.Commit) dgv.EndEdit() End If End Sub </code></pre> <p> </p> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridCheck003.jpg" alt="チェックしてみる" /></p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridCheck004.jpg" alt="チェックを外してみる" /></p> <p>無事に処理できましたね。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>次回は、チェックされた行の背景色を変更してみたいと思います。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/20/post-3502/" target="_blank" rel="noopener noreferrer">【VB.NET】データグリッドビューでチェックされた行の背景色を変更する</a></p> <p>ではでは。</p> doraxdora tag:crieit.net,2005:PublicArticle/15388 2019-09-11T09:55:11+09:00 2019-09-11T09:55:11+09:00 https://crieit.net/posts/VB-NET-5d7845ef59cd6 【VB.NET】データグリッドビューで行毎のコンボボックスにイベントを設定する <p>引き続きVB.NETの話し。<br /> 今回はデータグリッドビューに配置したコンボボックスにイベントを設定するといったことをやってみます。</p> <p>プログラムは前回のものを流用します。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/12/14/3439/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【VB.NET】データグリッドビューを動的に作成する</a></p> <h2 id="プログラムの修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E4%BF%AE%E6%AD%A3">プログラムの修正</a></h2> <h3 id="新規メソッド追加"><a href="#%E6%96%B0%E8%A6%8F%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E8%BF%BD%E5%8A%A0">新規メソッド追加</a></h3> <p>ドロップダウンが(選択されて)閉じられた際の処理を新規メソッドで定義</p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' データグリッドビューのコンボボックスが閉じられた際のイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dataGridViewComboBox_DropDownClosed(ByVal sender As Object, ByVal e As EventArgs) Dim cb As DataGridViewComboBoxEditingControl = DirectCast(sender, DataGridViewComboBoxEditingControl) cb.EditingControlDataGridView.NotifyCurrentCellDirty(True) ' 行ごとに処理を変更する If cb.EditingControlRowIndex = 0 Then MessageBox.Show("1行目のコンボボックス:" &amp; cb.SelectedItem) ElseIf cb.EditingControlRowIndex = 1 Then MessageBox.Show("2行目のコンボボックス:" &amp; cb.SelectedItem) ElseIf cb.EditingControlRowIndex = 2 Then MessageBox.Show("3行目のコンボボックス:" &amp; cb.SelectedItem) End If cb.EditingControlDataGridView.EndEdit() End Sub </code></pre> <p>ここで、行インデックスや、列インデックス、または名前などを判定して処理を分岐します。</p> <h3 id="新規イベント追加"><a href="#%E6%96%B0%E8%A6%8F%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E8%BF%BD%E5%8A%A0">新規イベント追加</a></h3> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/ESP000001.jpg" alt="イベントの追加" /></p> <p>デザイナー画面でデータグリッドビューを選択し、プロパティ画面から対象のイベントを作成します。</p> <p>データグリッドビューのセル内に設置したコンボボックスの内容が表示された際に、ドロップダウンが(選択されて)閉じられたイベントを追加します。</p> <p>From1.vb</p> <pre><code> ''' <summary> ''' 編集中コントロールが表示されている際のイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dgv_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dgv.EditingControlShowing Dim cb = TryCast(e.Control, DataGridViewComboBoxEditingControl) If cb Is Nothing Then Return RemoveHandler cb.DropDownClosed, AddressOf dataGridViewComboBox_DropDownClosed AddHandler cb.DropDownClosed, AddressOf dataGridViewComboBox_DropDownClosed End Sub </code></pre> <h3 id="既存処理の修正"><a href="#%E6%97%A2%E5%AD%98%E5%87%A6%E7%90%86%E3%81%AE%E4%BF%AE%E6%AD%A3">既存処理の修正</a></h3> <p>データグリッド内のコンボボックスを選択した際に、<br /> 同じコンボボックスを連続でクリックすると正しく開かない問題が発覚したため既存の処理も修正。</p> <p>Form1.vb</p> <pre><code> ''' <summary> ''' データグリッドビューセルクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dgv_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellClick Dim dgv As DataGridView = CType(sender, DataGridView) gridComboHandle(dgv, e) End Sub ''' <summary> ''' データグリッドビューのコンボボックス制御 ''' </summary> ''' <param name="dgv"></param> ''' <param name="e"></param> Private Sub gridComboHandle(dgv As DataGridView, e As DataGridViewCellEventArgs) ' 対象の列だった場合 If dgv.Columns(e.ColumnIndex).Name = "col3" Then SendKeys.SendWait("{F4}") End If End Sub </code></pre> <p>データグリッドビューのセルエンターイベントで処理していたのを、<br /> セルクリックに変更して、更に「SendKey.Send」を「SendKey.SendWait」に変更。</p> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/ESP000002.jpg" alt="起動後の画面" /></p> <p>起動後の画面です。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/ESP000003.jpg" alt="コンボボックスを選択" /></p> <p>コンボボックスを選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/ESP000004.jpg" alt="イベントが処理される" /></p> <p>イベントが処理され、メッセージボックスが表示されました。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>データグリッドビューにコンポーネントを配置するってよくある話しだと思うんですが、何で標準でもっと便利にしてくれないんでしょうかね。</p> <p>ちょっとハマった部分は、コンボボックスを1回で開くところですね。<br /> まあなんとかなってよかったです。</p> <p>また何かあれば記事にしようと思います。</p> <p>ではでは。</p> <p> </p> doraxdora tag:crieit.net,2005:PublicArticle/15386 2019-09-10T09:47:55+09:00 2019-09-10T09:47:55+09:00 https://crieit.net/posts/VB-NET 【VB.NET】データグリッドビューを動的に作成して行毎に違う内容のコンボボックスを表示する <p>ちょっと仕事の関係でVB.NETを使う機会があったので、備忘的な記事になります。</p> <p>完全にデータグリッドビューの使い方からは外れてしまうのかもしれませんが、<br /> 行ごとに別の内容のコンボボックスを表示するといったことをやりました。</p> <p>まずはサンプルプロジェクトの作成から。</p> <h2 id="プロジェクトの新規作成"><a href="#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E6%96%B0%E8%A6%8F%E4%BD%9C%E6%88%90">プロジェクトの新規作成</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridConb000.jpg" alt="プロジェクトの作成" /></p> <p>VisualStudio2017 を起動し、上部メニューの「ファイル」>「新規作成」>「プロジェクト」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridConb001.jpg" alt="プロジェクト名の入力" /></p> <p>新しいプロジェクト作成ウィザードが表示されるので、<br /> 「Visual Basic」>「Windowsフォームアプリケーション」を選択、名前を入力して「OK」ボタンをクリックします。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridConb002.jpg" alt="デザイナー画面" /></p> <p>作成後はデザイナー画面が表示されます。</p> <p>とりあえずプロジェクトの作成はこれで完了です。</p> <h2 id="データグリッドビューの配置"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B0%E3%83%AA%E3%83%83%E3%83%89%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AE%E9%85%8D%E7%BD%AE">データグリッドビューの配置</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridConb003.jpg" alt="データグリッドビューの配置" /></p> <p>ツールボックスから「DataGridView」を選択して画面に配置します。<br /> サイズなんかはとりあえず適当で大丈夫です。</p> <h3 id="名前の設定"><a href="#%E5%90%8D%E5%89%8D%E3%81%AE%E8%A8%AD%E5%AE%9A">名前の設定</a></h3> <p>プロパティから、「Name」の項目に「dgv」を設定しておきます。<br /> (コードビハインドから操作する際にこの項目を使用します)</p> <h3 id="イベントの追加"><a href="#%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E8%BF%BD%E5%8A%A0">イベントの追加</a></h3> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridConb004.jpg" alt="イベントの追加" /></p> <p>データグリッドビューを選択した状態でプロパティから、イベントメニューを選択、<br /> 「Load」の項目をダブルクリックして起動時の処理を追加します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridConb005.jpg" alt="イベントの追加2" /></p> <p>また、データグリッドビューのセルに設置するコンボボックスのために、<br /> 「CellEnter」の項目もイベントを追加しておきます。</p> <h2 id="処理の実装"><a href="#%E5%87%A6%E7%90%86%E3%81%AE%E5%AE%9F%E8%A3%85">処理の実装</a></h2> <p>Form1.vb(コード)に、プログラムを記述します。</p> <h3 id="ロードイベント"><a href="#%E3%83%AD%E3%83%BC%E3%83%89%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88">ロードイベント</a></h3> <pre><code> ''' <summary> ''' フォームロードイベント. ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim mainList As String() = {"ユーザー", "集客", "行動", "コンバージョン"} Dim userList As String() = {"アクティブユーザー", "ライフタイムバリュー", "コポート分析"} Dim syukyakuList As String() = {"全てのトラフィック", "AdWords", "Search Console"} Dim koudouList As String() = {"行動フロー", "サイトコンテンツ", "サイトの速度"} ' データグリッドの設定 dgv.AllowUserToAddRows = False dgv.AllowUserToResizeRows = False dgv.AllowUserToResizeColumns = False dgv.RowHeadersVisible = False ' ヘッダースタイル定義(共通) Dim headerStyle As New DataGridViewCellStyle() headerStyle.Alignment = DataGridViewContentAlignment.MiddleCenter ' チェックボックス列追加 Dim checkCol As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn() checkCol.HeaderCell.Style = headerStyle checkCol.HeaderText = "選択" checkCol.Name = "col1" checkCol.DataPropertyName = "col1" checkCol.Width = 40 dgv.Columns.Add(checkCol) ' スタイル設定 Dim checkStyle As New DataGridViewCellStyle() checkStyle.Alignment = DataGridViewContentAlignment.MiddleCenter checkCol.DefaultCellStyle = checkStyle ' テキスト列追加 Dim textCol As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn() textCol.HeaderCell.Style = headerStyle textCol.HeaderText = "メニュー" textCol.Name = "col2" textCol.DataPropertyName = "col2" textCol.Width = 120 dgv.Columns.Add(textCol) ' コンボボックス列の追加 Dim cbCol As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn() cbCol.HeaderCell.Style = headerStyle cbCol.HeaderText = "項目" cbCol.Name = "col3" cbCol.DataPropertyName = "col3" cbCol.Width = 150 dgv.Columns.Add(cbCol) Dim i As Short For i = 0 To mainList.Length - 1 ' 行追加 dgv.Rows.Add() ' チェックボックス Dim chk As New DataGridViewCheckBoxCell() chk.Value = False dgv(0, i) = chk ' テキストボックス Dim txt As New DataGridViewTextBoxCell() txt.Value = mainList(i) dgv(1, i) = txt Dim cmb As New DataGridViewComboBoxCell() If (mainList(i) = "ユーザー") Then cmb.Items.AddRange(userList) dgv(2, i) = cmb dgv(2, i).Value = userList(0) ElseIf (mainList(i) = "集客") Then cmb.Items.AddRange(syukyakuList) dgv(2, i) = cmb dgv(2, i).Value = syukyakuList(0) ElseIf (mainList(i) = "行動") Then cmb.Items.AddRange(koudouList) dgv(2, i) = cmb dgv(2, i).Value = koudouList(0) ElseIf (mainList(i) = "コンバージョン") Then ' コンボボックスを設定しない End If Next End Sub </code></pre> <h3 id="データグリッドビューのセルエンターイベント"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B0%E3%83%AA%E3%83%83%E3%83%89%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AE%E3%82%BB%E3%83%AB%E3%82%A8%E3%83%B3%E3%82%BF%E3%83%BC%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88">データグリッドビューのセルエンターイベント</a></h3> <pre><code> ''' <summary> ''' データグリッドビューセルエンターイベント. ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub dgv_CellEnter(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellEnter ' データグリッドビューを取得 Dim dgv As DataGridView = CType(sender, DataGridView) gridComboHandle(dgv, e) End Sub </code></pre> <h3 id="データグリッドビューのコンボボックス制御"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B0%E3%83%AA%E3%83%83%E3%83%89%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%9C%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E5%88%B6%E5%BE%A1">データグリッドビューのコンボボックス制御</a></h3> <p>通常だと、データグリッドビューに設置したコンボボックスは一回のクリックで開いてくれない。<br /> それをなんとかするための措置。</p> <pre><code> ''' <summary> ''' データグリッドビューのコンボボックス制御 ''' </summary> ''' <param name="dgv"></param> ''' <param name="e"></param> Private Sub gridComboHandle(dgv As DataGridView, e As DataGridViewCellEventArgs) ' 対象のグリッドであれば If dgv.Columns(e.ColumnIndex).Name = "col3" Then SendKeys.Send("{F4}") End If End Sub </code></pre> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridConb006.jpg" alt="起動後の画面" /></p> <p>ひとまずグリッドに内容が表示されました。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridConb007.jpg" alt="1行目のコンボボックス" /></p> <p>1行目のコンボボックスの内容です。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/12/VbGridConb008.jpg" alt="2行目のコンボボックス" /></p> <p>2行目のコンボボックスの内容です。</p> <p>ひとまず目的のことはできましたね。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>本来であれば、データグリッドビューではなく他のコントローラで実現すべきところなんだと思いますが、顧客からの要望なんかでやらざるをえない場合もありますよね。</p> <p>何かの参考になれば。</p> <p>ではでは。</p> doraxdora