- PR -

コンボボックスの値をコードより選択する方法

1
投稿者投稿内容
chiroru
ベテラン
会議室デビュー日: 2008/10/02
投稿数: 59
投稿日時: 2009-02-27 18:23
言語:Microsoft Visual Studio 2008
データベース:SQL Server 2005

コンボボックスに複数の値を持たせる際
コンボボックスの値をコードより選択する方法がわかりません。

<名称><コード>
りんご   001
みかん   002
ばなな   003

上記コンボボックスでコード="002"の時には、"みかん"にカーソルをセットしたい。
カーソルのセットは、SelectedIndexで取得できるのはわかっているのですが、
この場合、コード="002"がIndex=1と判別できません。
下記のようにコーディングしたのですが、エラーが発生します。
エラー:{"新しい表示メンバにバインドできません。 パラメータ名: newDisplayMember"}
どなたかご教授お願いします。

コード:

Module modCmbSet
Public Function cmbCODETBL(ByRef nObject As Object) As Boolean
Dim strSql As String
Dim strCode As String
Dim strValue As String
Dim myLists As ArrayList = New ArrayList
nObject.BeginUpdate()
nObject.Items.Clear()
'〜下記SQLにてデータ取得〜
strSql = "SELECT * FROM T_CODE WHERE (NO = 1) ORDER BY COD_CODE"
sqlDA.Fill(ds, "CODE")
If ds.Tables("CODE").Rows.Count > 0 Then
For i = 0 To ds.Tables("CODE").Rows.Count - 1
Dim row As DataRow = ds.Tables("CODE").Rows(i)
strCode = row.Item("COD_CODE").ToString
strValue = row.Item("COD_NAME").ToString
myLists.Add(New clsItemData(strValue, strCode))
Next
End If
ds.Dispose()
nObject.EndUpdate()
nObject.DataSource = myLists
nObject.DisplayMember = "strValue"
nObject.ValueMember = "ItemData" ←エラー
Return True
End Function
End Module


コード:

Public Class clsItemData

Private sValue As String
Private sCode As String 'You can also declare this as String.

Public Sub New()
sValue = ""
sCode = ""
End Sub

Public Sub New(ByVal nValue As String, ByVal nCode As String)
sValue = nValue
sCode = nCode
End Sub

Public Property Value() As String
Get
Return sValue
End Get

Set(ByVal sValue As String)
sValue = sValue
End Set
End Property

Public Property Code() As String
Get
Return sCode
End Get

Set(ByVal nValue As String)
sCode = nValue
End Set
End Property

Public Overrides Function ToString() As String
Return sValue
End Function

End Class



[ メッセージ編集済み 編集者: chiroru 編集日時 2009-02-27 18:24 ]
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2009-02-27 18:40
こんばんわ。

DisplayMember と ValueMember の指定の仕方が間違っています。

DisplayMemberはComboBoxに表示したい文字列を取得するためのプロパティ名を指定します。
今回のケースではArrayList (中身はclsItemDataオブジェクト)がDataSourceですので、
clsItemDataクラスのどのプロパティを表示したいのか指定してみてください。

ValueMemberも考え方は同じです。

引用:

上記コンボボックスでコード="002"の時には、"みかん"にカーソルをセットしたい。
カーソルのセットは、SelectedIndexで取得できるのはわかっているのですが、
この場合、コード="002"がIndex=1と判別できません。


あとは、SelectedValueプロパティを利用すればコードでの設定が可能になるかと思います。

以上、ご参考になれば
chiroru
ベテラン
会議室デビュー日: 2008/10/02
投稿数: 59
投稿日時: 2009-02-27 19:07
引用:

今回のケースではArrayList (中身はclsItemDataオブジェクト)がDataSourceですので、
clsItemDataクラスのどのプロパティを表示したいのか指定してみてください。


すみません。指定の仕方がわかりません。
こう書いてみたのですがダメでした。
nObject.DisplayMember = "sValue"
nObject.ValueMember = "ItemData"
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-27 19:36
引用:
nObject.DisplayMember = "sValue"
nObject.ValueMember = "ItemData"


これは最初の書き込みと変わっていないんじゃないでしょうか。
"sValue"と"ItemData"はプロパティ名ではないですよね。
sValue は clsItemData クラスのメンバ変数、
ItemData はこのソースには一度も出てきていない名前です。

Toshi さんは

引用:
clsItemDataクラスのどのプロパティを表示したいのか指定してみてください。


と仰っていますよね。
その通りにしてみて下さい。
chiroru
ベテラン
会議室デビュー日: 2008/10/02
投稿数: 59
投稿日時: 2009-02-27 20:21
clsItemDataクラスのプロパティの設定ですがこれでよろしいですか?
コード:
Dim clsItemDatainfo As New clsItemData
nObject.DisplayMember = clsItemDatainfo.Value
nObject.ValueMember = clsItemDatainfo.Code


フォームセット時に
me.combboxname.SelectedValue = "002"
としても、"002"の名称が表示されません。
すみませんがもう少しお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2009-02-27 21:23
引用:

chiroruさんの書き込み (2009-02-27 20:21) より:

clsItemDataクラスのプロパティの設定ですがこれでよろしいですか?


率直に言えば、"プロパティ名自体をセットしましょう" と言われているのですよ。 MSDN ライブラリで ValueMember プロパティ、DisplayMember プロパティの解説をご覧になった方が早いかと思われます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
chiroru
ベテラン
会議室デビュー日: 2008/10/02
投稿数: 59
投稿日時: 2009-02-27 22:09
ありがとうございます。
MSDN ライブラリで ValueMember プロパティ、DisplayMember プロパティの解説
を読みました。
nObject.DisplayMember = "Value"
nObject.ValueMember = "Code"
でよろしいでしょうか?
今自宅に帰ったため環境がなくテストできません。
また来週続きをしたいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)