web-dev-qa-db-ja.com

複数の列を持つWinFormsコンボボックス(C#)?

現在、次のコードを使用してコンボボックスを作成しています:

combobox.DataSource = datatable;
combobox.DisplayMember = "Auftragsnummer";
combobox.ValueMember = "ID";

複数の列を表示する方法はありますか? DisplayMemberで「Auftragsnummer、Kunde、Beschreibung」を試してみましたが、うまくいきませんでした。

15
user134146

複数の列を含めることはできません。表示メンバーとして複数のフィールドを連結することができますが

チェックアウト: displaymemberがソースデータテーブルの2つのフィールドを連結するようにコンボをバインドするにはどうすればよいですか?

12
Rashmi Pandit

Multicolumn ComboBoxの作成方法を説明したMSDNの記事があります。

Windowsフォームでコンボボックスの複数列のドロップダウンリストを作成する方法

http://support.Microsoft.com/kb/982498


上記のMicrosoftリンクからのVBのダウンロードからのソースコード。これは、ListBoxおよびComboBoxで動作するように簡単に適合させることができます。

'************************************* Module Header **************************************'
' Module Name:  MainForm.vb
' Project:      VBWinFormMultipleColumnComboBox
' Copyright (c) Microsoft Corporation.
' 
' 
' This sample demonstrates how to display multiple columns of data in the dropdown of a ComboBox.
' 
' This source is subject to the Microsoft Public License.
' See http://www.Microsoft.com/opensource/licenses.mspx#Ms-PL.
' All other rights reserved.
' 
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
' EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
' WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
'******************************************************************************************'

Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms
Imports System.Drawing.Drawing2D

Public Class MainForm

    Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim dtTest As DataTable = New DataTable()
        dtTest.Columns.Add("ID", GetType(Integer))
        dtTest.Columns.Add("Name", GetType(String))

        dtTest.Rows.Add(1, "John")
        dtTest.Rows.Add(2, "Amy")
        dtTest.Rows.Add(3, "Tony")
        dtTest.Rows.Add(4, "Bruce")
        dtTest.Rows.Add(5, "Allen")

        ' Bind the ComboBox to the DataTable
        Me.comboBox1.DataSource = dtTest
        Me.comboBox1.DisplayMember = "Name"
        Me.comboBox1.ValueMember = "ID"

        ' Enable the owner draw on the ComboBox.
        Me.comboBox1.DrawMode = DrawMode.OwnerDrawFixed
        ' Handle the DrawItem event to draw the items.
    End Sub

    Private Sub comboBox1_DrawItem(ByVal sender As System.Object, _
                                   ByVal e As System.Windows.Forms.DrawItemEventArgs) _
                                   Handles comboBox1.DrawItem
        ' Draw the default background
        e.DrawBackground()

        ' The ComboBox is bound to a DataTable,
        ' so the items are DataRowView objects.
        Dim drv As DataRowView = CType(comboBox1.Items(e.Index), DataRowView)

        ' Retrieve the value of each column.
        Dim id As Integer = drv("ID").ToString()
        Dim name As String = drv("Name").ToString()

        ' Get the bounds for the first column
        Dim r1 As Rectangle = e.Bounds
        r1.Width = r1.Width / 2

        ' Draw the text on the first column
        Using sb As SolidBrush = New SolidBrush(e.ForeColor)
            e.Graphics.DrawString(id, e.Font, sb, r1)
        End Using

        ' Draw a line to isolate the columns 
        Using p As Pen = New Pen(Color.Black)
            e.Graphics.DrawLine(p, r1.Right, 0, r1.Right, r1.Bottom)
        End Using

        ' Get the bounds for the second column
        Dim r2 As Rectangle = e.Bounds
        r2.X = e.Bounds.Width / 2
        r2.Width = r2.Width / 2

        ' Draw the text on the second column
        Using sb As SolidBrush = New SolidBrush(e.ForeColor)
            e.Graphics.DrawString(name, e.Font, sb, r2)
        End Using
    End Sub
End Class
9
Irshad

データセットにダミー列(Description)を追加して、コンボボックスデータバインディングでDisplayMemberとして使用できます。

SELECT Users.*, Surname+' '+Name+' - '+UserRole AS Description FROM Users
ComboBox.DataBindings.Add(new Binding("SelectedValue", bs, "ID"));
ComboBox.DataSource = ds.Tables["Users"];
ComboBox.DisplayMember = "Description";
ComboBox.ValueMember = "ID";

シンプルで機能します。

5
bizabo

.NETではそのままでは利用できません(Windowsフォームでもasp.netのドロップダウンリストでも)このコードプロジェクト項目をチェックして、独自のコードを作成する方法を参照してください。 (ただし、ロードはもっとあります)。

コードプロジェクト

3
Colin

Multicolumn ComboBoxを作成する方法を説明するコードプロジェクトに関する記事があります。

マルチカラムコンボボックス-コードプロジェクト

2
Pop Catalin

迅速な解決策
私が覚えている限り、データテーブルは部分的なクラスでなければなりません

  1. データテーブルMyDataTable.custom.csの2番目のファイルを作成します
  2. 「DisplayProperty」と呼ばれる部分的なデータテーブルクラスに文字列プロパティを追加します。
  3. そのプロパティでstring.format( "{0} {1} {2}"、Auftragsnummer、Kunde、Beschreibung);を返します。
  4. データメンバーをDisplayPropertyにバインドします
0
Peter Gfader

複数列のコンボボックスは使用できません。

代わりに DataGridView を使用するほうがよいでしょうか?

0
James

簡単で早い!これを見て...

combobox.Datasource = 
entities.tableName.Select(a => a.Coulmn1 + " " + a.Coulmn2).ToList();
0
David Greenfeld

MultiColumn ComboBox Control は、編集するテキストボックスコントロールとドロップダウンリストのグリッドビューを組み合わせてデータを表示します。

0
Leonards