COMのライブラリで処理した結果がObject型(ただし、中身は1次元の整数の並び)で返され、それがIDとなって改めてIDに対応する文字を取得することで、IDと名称のリストがえられるという処理の結果を表示する必要が出てきました。IDと値なので、キーと文字列、ということで「Genericを使ったDictionaryでいける?」と思い、Dictionaryを作成。次、これをDataGridViewに表示させるのに、データバインドを使おうとすると、ダメと言われる。
これの解決は下記のリンクからの情報で実現しました。
- MSDN Forum/DataGridView bound to a generic dictionary
- http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/d3698481-0b48-4b09-8652-5bfa35a13585/
要するに、DataGridViewのデータバインドは、IListを実装したオブジェクトに対してしか行うことができないので、基本、List型で情報を用意する必要がある。なので、DictionaryをListに変えるために、下記の処理を行います。
Dim resultDict As New Dictionary(Of Integer, String) 'KeyVAluePair型(それもGeneric)のListを定義する Dim resultList As New List(Of KeyValuePair(Of Integer, String)) For Each item In XXXObject.GroupList 'これがCOMのライブラリで用意された、Object型でIDを返すプロパティ resultDict.Add(item, String.Empty) '値はまだ取ってないのでString.Emptyで Next 'Dictionaryの内容をゴソっとListに移す resultList.AddRange(resultDict) '対象となるDataGridView(GroupDataListと命名)にListをデータバインド GroupDataGrid.DataSource = resultList
こんだけ。