投稿日:2021年3月10日
更新日:2021年3月9日
DataGridViewのカスタムコントロールの作り方
前々回、カスタムコントロールの説明と作り方を行いました。
(一度、JAVA+JSへ、浮気を行いましたが^^;)
前々回の内容は、こちらから参照願います。
実用的なカスタムコントロールの作り方
他のカスタムコントロールは、ほぼ作成が完了したので、
メインのDataGridViewのカスタムコントロールを作成したいと思います。
何社か、依頼で、DataGridViewのカスタムコントロールを作ってきましたが、
DataGridViewは、機能が多い分、作るのも大変な作業となります。
(マルチローについても、依頼で何社か納品しました(笑))
細かい所は、省略していくかも知れませんが、なるべく詳しく説明させていただく予定になります。
でも、長くなりそうですね~(笑)
まずは、テスト用のフォームを作成することから始めます。
テスト用のフォームの構成は、標準とカスタムコントールになります。
テスト用のフォームは、以下で構成しています。
カスタムテキストボックス① |
標準DataGridView |
カスタムテキストボックス② |
カスタムDataGridView |
カスタムテキストボックス③ |
ボタン(ロジックなど検証用 |
機能なしカスタムコントロールは、もうすでに作成しています。
但し、機能なしと書いてあるように、これから機能を追加する予定になります。
カスタムコントロールの追加方法は、下記で書いていますので、
同様の作業にて、DataGridViewの作成が可能です。
まずは、カラムと行を追加して、テストができやすい環境を作ります。
テストや違いを見る為にも、カラム(列)、Row(行)をはじめに追加したいと思います。
私は基本的に、DataglidViewはバインドして使用する事が多いので、バインドを使用する事にします。
但し、いつもはバインドにDataTableを使用しますが、今回は、Listでバインドを行います。特に、理由はありません。
あくまで、テスト用のロジックになりますので、適当に作っていきます。(笑)
まずは、データのカラム作成。(List)
こんな感じで、データ部分を作成しました。
Private prvLstDt As List(Of lstRowS)
Public Class lstRowS
Public Property col01 As String = ""
Public Property col02 As String = ""
End Class
これは、データのカラムを2つ作成しているだけです。
データの作成部分(レコード2つ)を作ります。
Private Sub crtTbl()
Dim lstRow As New lstRowS()
lstRow.col01 = "Dat01"
lstRow.col02 = "Dat02"
Dim lstDt As New List(Of lstRowS)
lstDt.Add(lstRow)
lstDt.Add(lstRow)
prvLstDt = lstDt
End Sub
いらない部分もありますが、こんな感じです。
- 上から3行(Sub除く)で、1レコードのデータを作成。
- 4行~6行目で、データを2件追加
- 最後に、プライベート変数に渡しています。
次は、DataGridViewのカラムを作成します。
DataGridViewのカラムを作成したいのですが、毎回同じことを書くのや嫌なので、ついでにメソッドを作りたいと思います。
Private Function crtCol(ByVal colNm As String, ptyNm As String) As DataGridViewColumn
Dim col As DataGridViewColumn
Dim colTxt As New DataGridViewTextBoxColumn
colTxt.Name = colNm
colTxt.HeaderText = colNm
colTxt.DataPropertyName = ptyNm
col = DirectCast(colTxt.Clone, DataGridViewColumn)
Return col
End Function
こんな感じで、作成しました。
- colTxt.Name:カラムID
- colTxt.HeaderText:カラム名(同じでいいか!(笑))
- colTxt.DataPropertyNam:これがバインド先のカラムIDになります。
最後に、作ったメッドをイベント(クリック)に追加して!
最後に、今まで作ったロジック(メソッド)を使用して、連結していきます。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Call crtTbl()
Dim dgvMcs As DataGridView = Me.dgvMs
Dim dgvRtb As DataGridView = Me.dgvRt
With dgvMcs
.Columns.Clear()
.Columns.Add(crtCol("colMcs01", "col01"))
.Columns.Add(crtCol("colMcs02", "col02"))
.DataSource = prvLstDt
End With
With dgvRtb
.Columns.Clear()
.Columns.Add(crtCol("colRtb01", "col01"))
.Columns.Add(crtCol("colRtb02", "col02"))
.DataSource = prvLstDt
End With
End Sub
説明は?
特に必要なさそうですね~(たぶん)
DataGlidViewのバインドが完了になります。
これを実行して、ボタンを押すと、このようになるはずです!
次回の予定は!
これで、テスト用フォームが完成しました。
次回は、このフォームを使用して、カスタムDataGlidViewの機能アップを行いたいと思います。
残っている懸案
分類 | 懸案 | 結論 | 完了 |
---|---|---|---|
- | 現在なし | - | - |
今回のまとめ
DataGlidViewにカスタムコントロールは、絶対にどこかでハマるのよね~(笑)
DataGlidViewについては、当面続くかと思います。