Introduction
This is a simple example of how to display table values (i.e. multiple columns) in a combo box. For the dropdown window, a form with a ListView
docked to fill can be used. The MultiColumnCombobox
class is inherited from the System.Windows.Forms.Combobox
class.
protected override void OnDropDown(System.EventArgs e){
Form parent = this.FindForm();
if(this.dataTable != null || this.dataRows!= null){
MultiColumnComboPopup popup = new
MultiColumnComboPopup(this.dataTable,
ref this.selectedRow,columnsToDisplay);
popup.AfterRowSelectEvent+=
new AfterRowSelectEventHandler
(MultiColumnComboBox_AfterSelectEvent);
popup.Location = new Point(parent.Left +
this.Left + 4 ,parent.Top +
this.Bottom + this.Height);
popup.Show();
..........................
The OnDropDown
event of the ComboBox
is overridden to display our popup from. The popup form should never be a modal, because the popup has to close, if the user decides to click elsewhere other than the grid on the dropdown form. To check where the user has selected something, I use the popup.AfterRowSelectEvent
, to fire an event on the MulticolumnComboBox
. To use the MulticolumnComboBox
do the following:
multiColumnComboBox1.Table = dtable;
multiColumnComboBox1.DisplayMember = "Band";
multiColumnComboBox1.ColumnsToDisplay = new
string[]{"Band","Song","Album"};
After the DataTable
is assigned to the combo, the dropdown looks like this:
After Selection, the DisplayMember
of that row is displayed.
The SourceCode
is pretty much self-explanatory, download it and try it out.