J'utilise actuellement le code suivant pour remplir une liste déroulante:
combobox.DataSource = datatable;
combobox.DisplayMember = "Auftragsnummer";
combobox.ValueMember = "ID";
Est-il possible d'afficher plusieurs colonnes? J'ai essayé "Auftragsnummer, Kunde, Beschreibung" pour DisplayMember mais cela n'a pas fonctionné.
Vous ne pouvez pas avoir plusieurs colonnes. Bien que vous puissiez avoir la concaténation de plusieurs champs en tant que membre d'affichage
Un article sur MSDN décrit comment créer une zone de liste déroulante multicolonne.
Comment créer une liste déroulante à plusieurs colonnes pour une liste déroulante dans Windows Forms
http://support.Microsoft.com/kb/982498
Code source du téléchargement pour VB du lien Microsoft ci-dessus, qui peut être facilement adapté pour fonctionner avec un contrôle ListBox ainsi qu'avec un contrôle 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
Vous pouvez ajouter à votre ensemble de données une colonne fictive (Description
) et l'utiliser comme DisplayMember
dans la liaison de données de la boîte à options.
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";
Simple et fonctionne.
Il n'est pas disponible directement dans .NET (que ce soit les formulaires Windows ou la liste déroulante de asp.net) Cochez cet élément de projet de code pour savoir comment créer le vôtre. (il y a des charges plus si).
Un article sur Code Project décrit comment créer une zone de liste déroulante multicolonne.
Solution rapide
Les datatables devraient être des classes partielles pour autant que je m'en souvienne
Vous ne pouvez pas avoir une liste déroulante à plusieurs colonnes.
Ne seriez-vous pas mieux d'utiliser un DataGridView à la place
Le MultiColumn ComboBox Control combine le contrôle Zone de texte à modifier et la vue en grille dans la liste déroulante pour afficher les données.