VB.NET の Combobox で選択したコードの値を Label に表示

Combobox(例:Combobox1)に、例えば商品マスタに登録されているコードと商品名を

ComboBox1.SetBinding(GoodsMst.m_goods, "code", "name")

みたいにバインドしていると、一覧には

001|大人プレイ用おむつ
002|触って遊べるこけし
003|身体にやさしローション

のように表示されるわけだが、この時、ComboBox1 の DescriptionControl プロパティにラベル等のコントロール(例:Label1)を指定していれば、特に処理をコーディングしなくても、コンボボックスで例えば「002|触って遊べるこけし」を選べば、指定したコントロール(Label1)に「触って遊べるこけし」って表示されるわけやね。

コンボボックスの DropDownStyle が DropDownList ならこれで問題無いが、DropDown のように「ユーザが入力もできる」コンボボックスの場合、対応した値がない、つまりマスタに存在していないコードが入力されることもあり、その場合は Label1 に何もセットされない。
しかし、商品マスタに存在していないコードを指定した場合は「未登録商品」とか「??????」とか何がしかの文字列を Label1 に表示してやりたいケースってあるよね?
この時ってどうすればいいだろう?
何か、そういう時に表示する文字列を指定しておくプロパティがあるのかな?と思ったけど、ざっと見てみた限りよくわからなかった。

なので、DescriptionControl プロパティの指定は(なし)に戻した上で、

Private Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged

If ComboBox1.SelectedIndex <> -1 Then
Label.Text = CStr(CType(ComboBox1.SelectedItem, DataRowView).Row(1))
Else
Label.Text = "????????"
    End If

End Sub

みたいに入力値の変更が発生するつどに「選択されたインデックス値」を調べ、インデックスが存在していれば(一覧に含まれているコードを入力したということ)、それに対応した名前(SelectedItem を DataRowView に変換して 2カラム目の値(1カラム目にはコードが入ってる))を Label1 にセットしてやっている。
インデックスが存在していない(-1 がセットされる)場合は「????????」をセットしている。

まあ、これで、俺の考えるとおりには動いているんだが、もっとスマートな方法があるのかね?

「そんな面倒くさいことしなくてもこんな方法があるぜ!」という神がいらっしゃれば是非ご教示を。

トラックバック(0)

このブログ記事を参照しているブログ一覧: VB.NET の Combobox で選択したコードの値を Label に表示

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3330

コメントする

このブログ記事について

このページは、shinodaが2015年2月23日 14:13に書いたブログ記事です。

ひとつ前のブログ記事は「何か、迷惑メールの数が 555 なだけで幸せ・・・」です。

次のブログ記事は「岩国ロックカントリーで1年ぶりにオールスターズを観た」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら