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