2007年5月7日月曜日

GrapeCityTool ElTanelle 4.0J

GrapeCity製のWorkSheet4.0の拡張コンボボックスエディタについてのメモです。


拡張コンボボックスをValueAsIndex=Falseにしていた場合、ValueMemberの「型」とDataFieldに設定するMappingの「型」を合わせないとエラーになります。

具体的に説明すると
拡張コンボボックスのValueMemberにはListItemクラスのCd(Object)が設定されています。
拡張コンボボックスを設定した1列目にはDataTableの「FIELD1」DataColumnが表示されます。
拡張コンボボックスのValueAsIndex=Falseを設定しないと拡張コンボボックスの選択値はIndexで選択されてしまいます。例えばFIELD1の値が「3」のとき、拡張コンボボックスのドロップダウンアイテムからインデックス3(=4つ目のアイテム)を選択しようとします。CD=3に該当するアイテムを選択したい場合はValueAsIndex=Falseを設定します。

'Form1クラスです。
Public Class Form1
  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
  Handles Me.Load
    '拡張コンボボックスのデータを作成します。
    Dim list As New List(Of ListItem)
    For idx As Integer = 1 To 10
      list.Add(New ListItem(i,"List_" & i.ToString)
    Next
    '拡張コンボボックスエディタを作成します。
    Dim cbo As New GrapeCity.Win.ElTabelle.Editors.SuperiorComboEditor
    With cbo 
      .DataSource = list
      .DisplayMember = "Name"
      .ValueMember = "Cd"
      .ValueAsIndex = False
    End With
    '拡張コンボボックスエディタをシートの1列目に設定します。
    Me.Sheet1.Columns(0).Editor = cbo  
    'シートに表示するデータを作成します。
    Dim sql As String = "SELECT FIELD1 FROM TABLE1"
    Dim connection As New System.Data.OleDb.OleDbConnection("接続文字列")  
    Dim adapter As New System.Data.OleDb.OleDbDataAdapter(sql, connection)
    Dim table As New DataTable
'このコードを入れないとエラーになります。
    table.Columns.Add(New DataColumn("FIELD1",GetType(Integer)))
adapter.Fill(table)
    'シートにデータを設定します。
    Me.Sheet1.DataSource = table
    Me.Sheet1.Columns(0).DataField = "FIELD1"
  End Sub
End Class


'コードとコードに対応する名前を保持するクラスです。
Public Class ListItem
Private _Cd As Object
private _Name As String
Public Sub New(cd As Object,name As String)
Me._Cd = cd
Me._Name = name
End Sub
Public Property Cd() As Object
Get
Return Me._Cd
End Get
Set(ByVal value As Object)
Me._Cd = value
End Set
End Property
Public Property Name() As String
Get
Return Me._Name
End Get
Set(ByVal value As String)
Me._Name = value
End Set
End Property
End Class

0 件のコメント: