サイト検索
検索
サイトメニュー
Menu
RTB SoftLab ラテベ ソフトラボ (ラテベラボ)
私の知っているソフトの操作を解りやすく、解説していきます。
サイト検索
検索
サイトメニュー
Menu

投稿日:2021年3月10日

更新日:2021年3月9日

DataGridViewのカスタムコントロールの作り方

前々回、カスタムコントロールの説明と作り方を行いました。
(一度、JAVA+JSへ、浮気を行いましたが^^;)

前々回の内容は、こちらから参照願います。
実用的なカスタムコントロールの作り方

他のカスタムコントロールは、ほぼ作成が完了したので、
メインのDataGridViewのカスタムコントロールを作成したいと思います。

何社か、依頼で、DataGridViewのカスタムコントロールを作ってきましたが、
DataGridViewは、機能が多い分、作るのも大変な作業となります。
(マルチローについても、依頼で何社か納品しました(笑))
細かい所は、省略していくかも知れませんが、なるべく詳しく説明させていただく予定になります。

でも、長くなりそうですね~(笑)

まずは、テスト用のフォームを作成することから始めます。

テスト用のカスタムフォーム
テスト用のカスタムフォーム

テスト用のフォームの構成は、標準とカスタムコントールになります。

テスト用のフォームは、以下で構成しています。

カスタムテキストボックス①
標準DataGridView
カスタムテキストボックス②
カスタムDataGridView
カスタムテキストボックス③
ボタン(ロジックなど検証用
テスト用のフォームの構成(TAB順)

機能なしカスタムコントロールは、もうすでに作成しています。
但し、機能なしと書いてあるように、これから機能を追加する予定になります。
カスタムコントロールの追加方法は、下記で書いていますので、
同様の作業にて、DataGridViewの作成が可能です。

カスタムコントロールの作り方(初級)(TextBox編)

まずは、カラムと行を追加して、テストができやすい環境を作ります。

テストや違いを見る為にも、カラム(列)、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のバインドが完了になります。

これを実行して、ボタンを押すと、このようになるはずです!

Listにバインドを行った、DataGridView
Listにバインドを行った、DataGridView

次回の予定は!

これで、テスト用フォームが完成しました。

次回は、このフォームを使用して、カスタムDataGlidViewの機能アップを行いたいと思います。

残っている懸案

分類懸案結論完了
現在なし
これからの懸案一覧

今回のまとめ

DataGlidViewにカスタムコントロールは、絶対にどこかでハマるのよね~(笑)

DataGlidViewについては、当面続くかと思います。

RTB カレンダー

31
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
1
2
3
4
通販サイト(ECサイト)デモへ
ラテベラボブログへ
ナノシスへ

RTBアーカイブ(旧 Widget 版)

RTB ポストランキング (旧)

RTBアーカイブ(旧 Widget 版)