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.TextChangedIf ComboBox1.SelectedIndex <> -1 ThenLabel.Text = CStr(CType(ComboBox1.SelectedItem, DataRowView).Row(1))ElseLabel.Text = "????????"End IfEnd Sub
みたいに入力値の変更が発生するつどに「選択されたインデックス値」を調べ、インデックスが存在していれば(一覧に含まれているコードを入力したということ)、それに対応した名前(SelectedItem を DataRowView に変換して 2カラム目の値(1カラム目にはコードが入ってる))を Label1 にセットしてやっている。
インデックスが存在していない(-1 がセットされる)場合は「????????」をセットしている。
まあ、これで、俺の考えるとおりには動いているんだが、もっとスマートな方法があるのかね?
「そんな面倒くさいことしなくてもこんな方法があるぜ!」という神がいらっしゃれば是非ご教示を。
電気ウナギ的○○
About Backコメント(0)
電気ウナギ的○○