- 題名: Combobox.Displaymember値のリセットについて
- 日時: 2011/08/17 19:15:42
- ID: 28900
- この記事の返信元:
- (なし)
- この記事への返信:
- [28901] Re[1]: Combobox.Displaymember値のリセットについて2011/08/17 21:53:08
- [28902] Re[1]: Combobox.Displaymember値のリセットについて2011/08/17 22:11:08
- ツリーを表示
■No28900に返信(すもけさんの記事)
Dim dtX As New DataTable
Dim dt As DataTable
Dim col As New DataColumn("EDITLINE")
dtX.Columns.Add("VALUE1")
dtX.Columns.Add("VALUE2")
dtX.Rows.Add("a1", "b1")
dtX.Rows.Add("a2", "b2")
dtX.Rows.Add("a3", "b3")
dtX.Rows.Add("a4", "b4")
dt = dtX.Copy()
dt.Columns.Add(col)
col.Expression = "VALUE1 + ':' + VALUE2"
ComboBox1.DisplayMember = col.ColumnName
ComboBox1.ValueMember = "VALUE1"
ComboBox1.DataSource = dt
これと同等の処理ですよね?
特に問題なく動くのですが、どこか違いますか?
こんばんは。
うちの環境ではそのまま書いても問題なく動作します。
Windows XP professional SP3にて、VisualStudio2005(.NET2.0用)と2008(.NET3.5用を指定)を使用。言語はVB。
もし上記が「実際のコード」と異なる「例示用のコード」でしたら、
実際のコードの方でこれと異なる何かをどこかでしていないか確認してみてください。
可能性が高いものとしては…実際のコードの方での(3)に相当する部分で、
元の方のDataTable(dtx)等、つまり「EDITLINE」列がないDataTableを指定してしまっていると、
そのような症状が発生すると思います。
※以下は実際に動作したものです。
────────────────────
Dim dtx As New DataTable
dtx.Columns.Add("VALUE1", GetType(String))
dtx.Columns.Add("VALUE2", GetType(String))
Dim rw As DataRow
rw = dtx.NewRow() : rw("VALUE1") = "1" : rw("VALUE2") = "11111" : dtx.Rows.Add(rw)
rw = dtx.NewRow() : rw("VALUE1") = "2" : rw("VALUE2") = "222" : dtx.Rows.Add(rw)
Dim dt As New DataTable
Dim col As New DataColumn("EDITLINE")
dt = dtx.Copy
dt.Columns.Add(col)
col.Expression = "VALUE1 + ':' + VALUE2"
ComboBox1.DisplayMember = col.ColumnName
ComboBox1.ValueMember = "VALUE1"
ComboBox1.DataSource = dt
分類:[.NET]
お世話になっております。
いつもはこちらの掲示板を閲覧することで解決してしまうのですが、
今回は残念ながらヒントになりそうな記事が見つかりませんでした。
現在
WindowsXP:VisualStudio2005:VB.NET
で
Combobox(cbx)へDataTable(dt)のデータを表示する処理を作成しています。
dim dt as New DataTable
dim col as New DataColumn("EDITLINE")
dt = dtX.copy (dtXはColumn"VALUE1","VALUE2"をもつDataTableです)
dt.Columns.Add(col)
col.Expression = "VALUE1 + ':' + VALUE2"
cbx.DisplayMember = col.ColumnName ・・・(1)
cbx.ValueMember = "VALUE1" ・・・(2)
cbx.DataSource = dt ・・・(3)
とした場合に
(3)処理後にcbx.DisplayMemberプロパティがブランクになってしまいました。
もちろんComboboxに表示されているデータも"System.Data.DataRowView"になってしまっています。
Expressionが原因かと思い、SQLで取得する時点で文字列結合をしてみましたが、
やはりDisplayMemberプロパティがブランクに設定されてしまいました。
同様の処理をListBoxへ出力する方法を試しましたが、こちらはうまくいきました。
解説が掲載されている場所等をご存知の方、いらっしゃいましたらご教授願います。