- 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"
でよろしいでしょうか?
今自宅に帰ったため環境がなくテストできません。
また来週続きをしたいと思います。
|