訪問して頂きありがとうございます。まさふくろーです。
前回の続きのプログラムのサンプルをご紹介します。
前回では、
SQLサーバーのデータを型付きデータテーブルにセットする方法
をご紹介しました。
動作イメージ
今回は、フォーム間のデータ受け渡しをするサンプルをご紹介します。
動作イメージ
画面イメージ
親画面
子画面
目次
Form2.vb(子画面)
Form2クラス内で使用する変数を宣言
1 2 3 4 |
Public Class Form2 Dim _SampleData As DataSet1.DataTableSampleDataTable Dim _CustomerID As String = String.Empty End Class |
フォーム間のデータ受け渡し用プロパティを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Public Class Form2 ''' <summary> ''' 顧客コード ''' フォーム間のデータ受け渡し用プロパティ ''' </summary> ''' <returns></returns> Public Property CustomerID As String Get CustomerID = _CustomerID End Get Set(value As String) _CustomerID = value End Set End Property ''' <summary> ''' 検索結果保持用データテーブル ''' フォーム間のデータ受け渡し用プロパティ ''' </summary> ''' <returns></returns> Public Property SampleData As DataSet1.DataTableSampleDataTable Get SampleData = _SampleData End Get Set(value As DataSet1.DataTableSampleDataTable) _SampleData = value End Set End Property End Class |
データを取得して、各コントロールに値を設定するメソッドを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
Public Class Form2 ''' <summary> ''' 子画面のデータを取得して、各コントロールに ''' 値を設定 ''' </summary> Private Sub GetDetailData() 'LINQによるデータ抽出 Dim dtCustomer = From n In SampleData.AsEnumerable Order By n.CompanyName Where n.CustomerID = CustomerID Select n For Each rec In dtCustomer txtCustomerID.Text = rec.CustomerID '各コントロールに値を設定 If rec.IsCompanyNameNull = False Then txtCompanyName.Text = rec.CompanyName Else txtCompanyName.Text = String.Empty End If If rec.IsCompanyNameNull = False Then txtContactName.Text = rec.ContactName Else txtContactName.Text = String.Empty End If If rec.IsContactTitleNull = False Then txtContactTitle.Text = rec.ContactTitle Else txtContactTitle.Text = String.Empty End If If rec.IsContactNameNull = False Then txtContactName.Text = rec.ContactName Else txtContactName.Text = String.Empty End If If rec.IsAddressNull = False Then txtAddress.Text = rec.Address Else txtAddress.Text = String.Empty End If If rec.IsCityNull = False Then txtCity.Text = rec.City Else txtCity.Text = String.Empty End If If rec.Is_RegionNull = False Then txtRegion.Text = rec._Region Else txtRegion.Text = String.Empty End If If rec.IsPostalCodeNull = False Then txtPostalCode.Text = rec.PostalCode Else txtPostalCode.Text = String.Empty End If If rec.IsCountryNull = False Then txtCountry.Text = rec.Country Else txtCountry.Text = String.Empty End If If rec.IsPhoneNull = False Then txtPhone.Text = rec.Phone Else txtPhone.Text = String.Empty End If If rec.IsFaxNull = False Then txtFax.Text = rec.Fax Else txtFax.Text = String.Empty End If Next End Sub End Class |
画面起動イベントを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Public Class Form2 ''' <summary> ''' 画面起動イベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load Try '待機状態 Me.Cursor = Cursors.WaitCursor '子画面の各コントロールに値を設定 GetDetailData() Catch ex As Exception MessageBox.Show(ex.Message) Finally '元に戻す Me.Cursor = Cursors.Default End Try End Sub End Class |
Form1.vb(親画面)
詳細表示ボタンのクリックイベントを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Public Class Form1 ''' <summary> ''' 詳細表示ボタンを押されたときの処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnDetail_Click(sender As Object, e As EventArgs) Handles btnDetail.Click Try '待機状態 Me.Cursor = Cursors.WaitCursor 'プライマリーキーのCustomerIDと一覧のデータを子画面に渡す。 Form2.CustomerID = DataGridView1.CurrentRow.Cells(0).Value Form2.SampleData = dtCustomers '子画面を表示 Form2.ShowDialog() Catch ex As Exception MessageBox.Show(ex.Message) Finally '元に戻す Me.Cursor = Cursors.Default End Try End Sub End Class |
最後まで読んでいただき、ありがとうございました!
本のまとめ関連記事はこちら