-----家計簿アプリに集計機能のコーデング---
【開発環境】
os:Windows 10 (64ビット)
IDE(統合開発環境):VisualStudio 2017及び2019
言語;VB
【参考書】
株式会社秀和システム「作って覚えるVisualBasic2017」
著者:萩原 博之/宮崎 昭世
【画面デザイン】
![](https://blogimg.goo.ne.jp/user_image/2e/16/e93584f198bcaf40e796fc3eeed744e4.jpg)
![](https://blogimg.goo.ne.jp/user_image/05/fd/79670332c49059d6c272b43f91cdcc60.jpg)
【集計表示デザイン】
①集計表示タブをクリックし、DataGridViewコントロールを貼る
![](https://blogimg.goo.ne.jp/user_image/17/78/bd00aec3f0aa0cb2f9272f894e36695a.jpg)
②データソースの選択
DataGridViewコントロールのスマートタグをクリックし、次に[データソースの選択]の↓ボタンをクリックし、「他のデータソース」-「プロジェクトデータソース」-「SummaryDataSet」-「SunDataTable」を選ぶ
![](https://blogimg.goo.ne.jp/user_image/29/fe/2de2b9f6665b9888523a370cc4fbf44a.jpg)
③データセットが表示される
![](https://blogimg.goo.ne.jp/user_image/7f/ad/7a3a1f84ff3e60f97e545d0331edc16c.jpg)
【コード】
Form1.vbに下記の関数を追加する。
Public Class Form1
'------------------------------
'データ集計
'------------------------------
Private Sub CalcSummary()
'変数宣言
Dim expression As String
'データセットの初期化
SummaryDataSet.SunDaTaTable.Clear()
'forループ文
For Each drMoney As MoneyDataSet.moneyDataTableRow _
In MoneyDataSet.moneyDataTable
expression = "日付='" _
+ drMoney.日付.ToShortDateString() _
+ "'"
'データの型変換 CType()
Dim curDR() As SummaryDataSet.SunDaTaTableRow _
= CType(SummaryDataSet.SunDaTaTable.Select(expression),
SummaryDataSet.SunDaTaTableRow())
'if文
If curDR.Length = 0 Then
'if文
If (CType(CategoryDataSet1.CategoryDataTable.Select _
("分類='" & drMoney.分類 & "'"),
CategoryDataSet.CategoryDataTableRow())(0).入出金分類 = "入金") Then
SummaryDataSet.SunDaTaTable.AddSunDaTaTableRow(
drMoney.日付, drMoney.金額, 0)
ElseIf (CType(CategoryDataSet1.CategoryDataTable.Select _
("分類='" & drMoney.分類 & "'"),
CategoryDataSet.CategoryDataTableRow())(0).入出金分類 = "出金") Then
SummaryDataSet.SunDaTaTable.AddSunDaTaTableRow(
drMoney.日付, 0, drMoney.金額)
End If
Else
If (CType(CategoryDataSet1.CategoryDataTable.Select _
("分類='" & drMoney.分類 & "'"),
CategoryDataSet.CategoryDataTableRow())(0).入出金分類 = "入金") Then
curDR(0).入金合計 += drMoney.金額
ElseIf (CType(CategoryDataSet1.CategoryDataTable.Select _
("分類='" & drMoney.分類 & "'"),
CategoryDataSet.CategoryDataTableRow())(0).入出金分類 = "出金") Then
curDR(0).出金合計 += drMoney.金額
End If
End If
Next
End Sub
'-----------------------------------------------------------------------------
'イベントハンドラ
'----------------------------------------------------------------------------
[集計表示]タブのイベントハンドラ
![](https://blogimg.goo.ne.jp/user_image/63/23/4cf230f4757588c6cc271517e1d9b6b5.jpg)
Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TabControl1.SelectedIndexChanged
CalcSummary()
End Sub
[表示]-[一覧表示]
![](https://blogimg.goo.ne.jp/user_image/53/4f/ad54205284ac7f5a1e08074984d5efbe.jpg)
Private Sub 一覧表示LToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 一覧表示LToolStripMenuItem.Click
TabControl1.SelectedTab = tabList
End Sub
[表示]-[集計表示]
Private Sub 集計表示SToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 集計表示SToolStripMenuItem.Click
TabControl1.SelectedTab = tabSummary
End Sub
End Class
以上
※コメント投稿者のブログIDはブログ作成者のみに通知されます