vb .net Winアプリでコンボボックスに値をセットする方法を教えて下さい。
table1
都道府県コード,都道府県名(カナ),都道府県名
01,ホッカイドウ,北海道
02,アオモリケン,青森県
03,イワテケン,岩手県
のテーブルがあり、既に読み込んでいます。
このデータをコンボボックスにセットしたいです。
Dim NpgsqlConnection1 As NpgsqlConnection
Dim NpgsqlCommand1 As NpgsqlCommand
Dim NpgsqlDataAdapter1 As NpgsqlDataAdapter
Dim String1 As String
Dim DataTable1 As DataTable
NpgsqlConnection1 = New Npgsql.NpgsqlConnection
NpgsqlConnection1.ConnectionString = gstrCnct
NpgsqlConnection1.Open()
String1 = "select * from table1;"
NpgsqlCommand1 = New NpgsqlCommand
NpgsqlCommand1.Connection = NpgsqlConnection1
NpgsqlCommand1.CommandText = String1
NpgsqlDataAdapter1 = New NpgsqlDataAdapter(String1, NpgsqlConnection1)
DataTable1 = New System.Data.DataTable
NpgsqlDataAdapter1.Fill(DataTable1)
' 一括の方法でもOK
' Me.ComboBox1.??? = ????
' ぐるぐるしながらセットでもOK
' Me.ComboBox1.??? = Space(0)
' Me.ComboBox1.??? = "ミセンタク"
' Me.ComboBox1.??? = "未選択"
For Each DataRow1 As DataRow In DataTable1.Rows
' Me.ComboBox1.??? = DataRow1("都道府県コード")
' Me.ComboBox1.??? = DataRow1("都道府県名(カナ)")
' Me.ComboBox1.??? = DataRow1("都道府県名")
Next DataRow1
■要件
メインの情報は都道府県名ですが、
めくった時に
都道府県コード,都道府県名(カナ),都道府県名
を見せる形で作りたいです。
都道府県コードは取り出す必要があります。
データ
1行目は空白,ミセンタク,未選択
2行目以降はtable1から取り出した値。
以上、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
表示項目(Text)とリスト項目(DisplayMember)を異なる設定には出来ないみたいです
そこで解決案として ComboBoxを継承したクラスを生成して
この中に 選択用と表示用の2つのConnboBoxを作って制御するといった具合になろうかと思います
' 選択用に cbSelectなどを Private WithEvents で宣言
private withEvents cbSelect as ComboBox
Sub Newを追加して
cbSelect = new ComboBox
' 表示用のドロップダウンの高さを1に設定して 見かけ上非表示にする
Me.DropDownHeight = 1
' 選択用を非表示にする
cbSelect.Visible =False
' 継承クラスのKeyDownイベントにて
if e.Alt AndAlso e.KeyCode = keys.Down then
' 処理済にするため
e.Handled = true
' 選択用を表示して ドロップダウンリストを表示する
cbSelect.Show
cbSelect.DropDown = true
' 自分を非表示に
me.hide
end if
cbSelectのDropDownClosedイベントにて
cbSelect.Hide
me.Show
me.Focus
' WINAPIの宣言を追加
<StructLayout(LayoutKind.Sequential)> _
Structure tCOMBOBOXINFO
Dim cbSize As Integer
Dim rcItem As Rectangle
Dim rcButton As Rectangle
Dim stateButton As Integer
Dim hwndCombo, hwndItem, hwndList As IntPtr
End Structure
Declare Ansi Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As IntPtr, ByVal umsg As UInt32, ByVal wParam As Integer, ByRef lParam As tCOMBOBOXINFO) As Integer
Const COMBOBOXINFO As UInt32 = &H164
Const STATE_SYSTEM_PRESSED As UInt32 = 8
Const STATE_SYSTEM_INVISIBLE As UInt32 = &H8000
Dim cbInfo As tCOMBOBOXINFO
' 継承コントロールのMouseDownイベントで
if e.Button = e.Button = Windows.Forms.MouseButtons.Left Then
Dim cb As tCOMBOBOXINFO
cb.cbSize = 52
If SendMessage(Me.Handle, COMBOBOXINFO, 0, cb) > 0 Then
If cb.stateButton = STATE_SYSTEM_PRESSED Then
cbSelect.Show()
cbSelect.DroppedDown = True
Me.Hide()
End If
End If
end if
' 継承コントロールのParentChangedイベントで
cbSelect.Parent = me.Parent
' 選択用のDisplayMemberプロパティの公開
public Property DisplayMember2 as String
get
return cbSelect.DisplayMember
End get
set(value as string)
cbSelect.DisplayMember = value
End Set
End Property
' 選択用のDorpDownHeightプロパティの公開
Public Property DropDownHeight2() As Integer
Get
Return cbSelect.DropDownHeight
End Get
Set(ByVal value As Integer)
cbSelect.DropDownHeight = value
End Set
End Property
' Size Width Location DataSourceのShadow化
Public shadows Property Size as Size
get
retur myBase.Size
End Get
Set(value as Size)
cbSelect.size = value
myBase.size = value
End Set
End Property
' 同様に Width Location DataSource を作成
といった具合で 出来るかと …
選択しているときの コンボボックスの表示が コード、読み、都道府県名 になってしまう点が ご希望に添えてないと思います
No.2
- 回答日時:
一時的なDataTableを構築して これをDataSouseやDisplayMember,ValueMemberに設定してみてはいかがでしょう
' 列情報などを複製する
dim dt as DataTable = DataTable1.Clone
' 表示列以外のデータの取得用
dt.Columns.add("ValueMember")
' 未選択の行を追加
dim row as DataRow = dt.NewRow
row("都道府県コード") = space(0)
row("都道府県名(カナ)") = "ミセンタク"
row("都道府県名") = "未選択"
dt.rows.add(row)
' 都道府県のデータを追加
dim rd as DataTableReader = DataTable1.CreateDataReader
dt.Load(rd)
' ValueMember列の生成
for each row in dt.rows
row("valueMember") = row(0) & "," & row(1)
next
' ComboBoxへのヒモ付け
ComboBOx1.DataSource = dt
ComboBox1.DisplayMember = dt.Ccolumns(2).ColumnName ' 都道府県名
ComboBox1.ValueMember = dt.Columns(3).ColumnName ' 都道府県コード,都道府県名(カナ)
といった具合で …
取り出しの際は
ComboBox1.Textで 都道府県名
ComboBox1.SelectedValue で 都道府県コード,都道府県名(カナ)
を取得できますよ
有難う御座います。
半分ぐらいやりたい事は出来ました。
後は、「複数項目を見せる」だけなのですが、
DisplayMember には1つしかセットできないし、
ValueMember は内部の値で表に出せないですよね。
ComboBoxでは無理なのでしょうか?
無理だとしたら、何のコントロールならできるのでしょうか?
コードと名称を同時に見せて、コンボボックス状に表現しているアプリを見かける事がありますが、VBでは無理なのでしょうか?
No.1
- 回答日時:
DataSourceプロパティに対象のDataTableを突っ込んで,
ref) http://msdn.microsoft.com/ja-jp/library/vstudio/ …
DisplayMemberプロパティに表示したいDataColumnのColumnNameを設定すればよいかと。
ref) http://msdn.microsoft.com/ja-jp/library/vstudio/ …
追加資料:Visual Studio でのデータへの Windows フォーム コントロールのバインド
http://msdn.microsoft.com/ja-jp/library/vstudio/ …
有難う御座います。
単純なケースでは成功しているのですが、
・DataTableの情報以外に1レコードだけコンスタント値でつっこむ
・複数の項目をプルダウンで見せる
この2点が分かりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックス(VBA)でEnter...
-
ADOのCursorLocationプロパティ
-
OpenGL テクスチャを縮小表示す...
-
C# TEXTが空白であるLABELは何...
-
チェックボックスの文字色の変え方
-
VB6でLabelの最前面にText Box...
-
Wordテキストコントロールが未...
-
checkbox付きListViewで デフ...
-
デザインモードを解除すると消...
-
リストコントロールのデータの...
-
コンボボックスの高さを変更し...
-
VB6でPNGファイルを扱うには?
-
VB.NETで縦書表示をしたいので...
-
エクセルの画像にツールチップ...
-
TableLayoutPanelでspan
-
VBのShapeコントロールを使用し...
-
日時や時刻を指定し、その時間...
-
VB2005 コードでのコントロー...
-
コンボボックスのセンタリング
-
【EXCEL2010 VBA】 部分的書式...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックス(VBA)でEnter...
-
ADOのCursorLocationプロパティ
-
エクセルの画像にツールチップ...
-
Enabled=Falseのテキストボック...
-
VB6でLabelの最前面にText Box...
-
Wordテキストコントロールが未...
-
コンボボックスの高さを変更し...
-
デザインモードを解除すると消...
-
DataGridViewで行の展開みたい...
-
C# TEXTが空白であるLABELは何...
-
VBからエクセルのテキストボ...
-
MSFlexGrid
-
checkbox付きListViewで デフ...
-
ACCESS2010 ActiveXコントロー...
-
ユーザーフォームに日付を表示...
-
エクセル入力規制リスト行数
-
VB.NETで縦書表示をしたいので...
-
チェックボックスの文字色の変え方
-
VC++のコンボボックスの各項目...
-
MFCでbitmapを背景にしてstatic...
おすすめ情報