DataGridViewを使おうと思う人なら、一度はひっかかりそうなのがコンボボックスセル。
これもねぇ、データバインディングして使う分には色々と資料やら掲示板やらがあるのでなんとかなるんだよねぇ。
ところがアンバウンドで、となると途端に資料が出てこないんだ、これが。
コンボボックスセルを使うために超えないといけない壁ってのがあるんだよね。
- コンボボックスで扱うアイテムのクラス
- 値と文字列との間で変換を掛ける
グリッド上でなくとも.Netのコンボボックスではアイテムにクラスを利用するので、その使い方に慣れれば最初の部分はOK。
まぁ二つ目の問題も最初の問題がクリアできている人にはたいした話じゃないんだよね。
「キーとなるのは何か?」という点さえつかめば、文字列と値との間での変換ってのはなんとかなると思う。
自分の場合「とりあえず」という状況だったのもあって、「コード+名称」をプロパティに持つクラスをコンボボックスの
アイテムとして扱うようにしていたな。大体こんな感じの。
''' <summary>コンボボックス表示設定用 クラス</summary>
Public Class ComboItem''' <summary>コード部</summary><exclude />
Protected _codeValue As String = ""
''' <summary>名称部</summary><exclude />
Protected _codeName As String = ""
''' <summary>区切り文字</summary><exclude />
Protected _separetedString As String = ":"''' <summary>コンストラクタ</summary>
Public Sub New()End Sub
''' <summary>コンストラクタ</summary>
Public Sub New(ByVal formatedCodeValue As String, ByVal name As String, _
ByVal separetedString As String)
_codeValue = formatedCodeValue
_codeName = name
_separetedString = separetedString
End Sub''' <summary>コード部 プロパティ</summary>
Public Property Code() As String
Get
Return _codeValue
End Get
Set(ByVal value As String)
_codeValue = value
End Set
End Property''' <summary>名称部 プロパティ</summary>
Public Property Name() As String
Get
Return _codeName
End Get
Set(ByVal value As String)
_codeName = value
End Set
End Property''' <summary>区切り文字 プロパティ</summary>
Public Property SeparetedString() As String
Get
Return _separetedString
End Get
Set(ByVal value As String)
_separetedString = value
End Set
End Property''' <summary>インスタンスの文字列化 メソッド</summary>
''' <remarks>コンボボックスなどにおいてItemsに追加される文字列を取得する
''' メソッド。コード部の文字列+区切り文字+名称部の文字列を返却する</remarks>
Public Overrides Function ToString() As String
Return _codeValue + _separetedString + _codeName
End FunctionEnd Class
とりあえず~、という事であればこれで十分。業務系でいく場合、大体はコードと名称さえあればなんとかなってしまうだろうし。
普通のコンボボックスでアイテムの扱い方がわかるのがまず先決かと。
ちょっと長くなりそうなので、この後のDataGridView関連の拡張は別記事に・・・。
0 件のコメント:
コメントを投稿