WinForms combobox with multiple columns (C#)?

前端 未结 11 2026
轮回少年
轮回少年 2020-12-01 21:19

I am using currently the following code to populate a combobox:

combobox.DataSource = datatable;
combobox.DisplayMember = \"Auftragsnummer\";
combobox.ValueM         


        
相关标签:
11条回答
  • 2020-12-01 21:38

    The full C# solution I provided for a Multicolumn Combo Box caused a problem when debugging in the app that used it. The problem was with the line "DateTime dt = DateTime.Parse(strColumnText);" in the method "IsDate" here is a new version of the method that uses DateTimeTryparse" instead: I have replaced the faulty version in the original. (N B For all its faults, it works!) cheers, Bruce Caldwell

         private bool IsDate(string strColumnText)
        {
            DateTime dateValue;
    
            if (DateTime.TryParse(strColumnText, out dateValue))
            {
                return true;
            }
            else
            {
                return false;
            }
        } // end sub
    
    0 讨论(0)
  • 2020-12-01 21:43

    The MultiColumn ComboBox Control combines the Text Box control to edit and the Grid View in the drop down list to display data.

    0 讨论(0)
  • 2020-12-01 21:50

    You can add to your dataset a dummy column (Description) and use that as DisplayMember in the combo box databinding.

    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 and works.

    0 讨论(0)
  • 2020-12-01 21:56

    There's an article on MSDN describing how a Multicolumn ComboBox can be created.

    How to create a multiple-column drop-down list for a combo box in Windows Forms

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


    Source code from the download for VB from the above Microsoft Link, that can be easily adapted to work with a ListBox as well as a 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
    
    0 讨论(0)
  • 2020-12-01 21:56

    You can't have a multiple column combo-box.

    Would you not be better off using a DataGridView instead

    0 讨论(0)
提交回复
热议问题