拡張コンボボックスを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 件のコメント:
コメントを投稿