2007年8月20日月曜日

DataGridViewのセルを拡張する(2) コンボボックスをアンバウンドで使う

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 Function

End Class

とりあえず~、という事であればこれで十分。業務系でいく場合、大体はコードと名称さえあればなんとかなってしまうだろうし。
普通のコンボボックスでアイテムの扱い方がわかるのがまず先決かと。

ちょっと長くなりそうなので、この後のDataGridView関連の拡張は別記事に・・・。

0 件のコメント:

コメントを投稿