Data Binding in Windows Forms MultiColumn ComboBox

Data binding concepts for the MultiColumnComboBox are discussed in the below topics.

DataView as data source

We can use the DataView as the data source for MultiColumnComboBox control. It can be done using the below code snippet.

private void Form1_Load(object sender, System.EventArgs e)
{

//Create dataTable
DataTable dt = new DataTable("Table1");
dt.Columns.Add("FirstName");
dt.Columns.Add("LastName");
dt.Columns.Add("occupation");
dt.Columns.Add ("place");

// Create a Data Set
DataSet ds = new DataSet();
ds.Tables.Add(dt);
dt.Rows.Add(new string[] {"John", "Tina","Doctor","Italy"});
dt.Rows.Add(new string[] {"Mary", "anu","Teacher","America"});
dt.Rows.Add(new string[] {"asha", "roy","Staff","London"});
dt.Rows.Add(new string[] {"George", "Gaskin","Nurse","germany"});
dt.Rows.Add(new string[] {"sam", "jens","Engineer","Russia"});
dt.Rows.Add(new string[] {"Ben", "Geo","Developer","India"});
DataView view = new DataView(dt);

// DATASOURCE is DATAVIEW
this.MultiColumnComboBox1.DataSource = view;
this.MultiColumnComboBox1.DisplayMember = "FirstName";
this.MultiColumnComboBox1.ValueMember = "LastName";
}
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)

'Create dataTable
Dim dt As DataTable = New DataTable("Table1")
dt.Columns.Add("FirstName")
dt.Columns.Add("LastName")
dt.Columns.Add("occupation")
dt.Columns.Add ("place")

' Create a Data Set
Dim ds As DataSet = New DataSet()
ds.Tables.Add(dt)
dt.Rows.Add(New String() {"John", "Tina","Doctor","Italy"})
dt.Rows.Add(New String() {"Mary", "anu","Teacher","America"})
dt.Rows.Add(New String() {"asha", "roy","Staff","London"})
dt.Rows.Add(New String() {"George", "Gaskin","Nurse","germany"})
dt.Rows.Add(New String() {"sam", "jens","Engineer","Russia"})
dt.Rows.Add(New String() {"Ben", "Geo","Developer","India"})
Dim view As DataView = New DataView(dt)

' DATASOURCE is DATAVIEW
Me.MultiColumnComboBox1.DataSource = view
Me.MultiColumnComboBox1.DisplayMember = "FirstName"
Me.MultiColumnComboBox1.ValueMember = "LastName"
End Sub

Using data adapter

This section deals with data binding in MultiColumnComboBox using OleDBDataAdapter. Follow the steps below.

  • Add a MultiColumnComboBox control to your form.
  • Add the appropriate DataAdapter and DataSets for your datasource.
  • Set the combobox’s datasource, DisplayMember and ValueMember properties.
  • Alternatively, you can set up the data binding in code, in the form’s load event handler as follows.
private void Form_Load(object sender, System.EventArgs e)
{

// Fill the dataset.
this.oleDbDataAdapter1.Fill(this.dataSet11);
this.oleDbDataAdapter2.Fill(this.dataSet21);  

// Set the DataSource,DisplayMember,ValueMember properties.
this.multiColumnComboBox1.DataSource = this.dataSet21.Customers;
this.multiColumnComboBox1.DisplayMember = "ContactName";
this.multiColumnComboBox1.ValueMember = "CompanyName";
}
Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs)

'Fill the dataset.
Me.oleDbDataAdapter1.Fill(Me.dataSet11)
Me.oleDbDataAdapter2.Fill(Me.dataSet21)

' Set the DataSource,DisplayMember,ValueMember properties.
Me.multiColumnComboBox1.DataSource = Me.dataSet21.Customers
Me.multiColumnComboBox1.DisplayMember = "ContactName"
Me.multiColumnComboBox1.ValueMember = "CompanyName"
End Sub

A sample which demonstrates the OleDbDataAdapter data binding is available in the below sample installation location.

…_My Documents\Syncfusion\EssentialStudio\Version Number\Windows\Tools.Windows\Samples\Advanced Editor Functions\ActionGroupingDemo_

Populating MultiColumnComboBox

This section deals with populating MultiColumnComboBox with typed Dataset as datasource. Follow the steps below :

  1. Open VS .NET IDE and click File  New  Project  Windows Application.
  2. Right click the project in the Solutions Explorer and click Add  New Item and Add New Item dialog box will be displayed.
  3. Select DataSet from templates pane, give the name (Say new dataset.XSD) and click Open. This will add file by name new dataset.XSD to the solution.
  4. Add the XML Schema as shown below.
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:EnforceConstraints="False">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="roster">
<xs:complexType>
<xs:sequence>
<xs:element name="PositionID" type="xs:string" minOccurs="0" />
<xs:element name="EmployeeID" type="xs:string" minOccurs="0" />
<xs:element name="PersonID" type="xs:string" minOccurs="0" />
<xs:element name="FirstName" type="xs:string" minOccurs="0" />
<xs:element name="LastName" type="xs:string" minOccurs="0" />
<xs:element name="BizUnitName" type="xs:string" minOccurs="0" />
<xs:element name="Title" type="xs:string" minOccurs="0" />
<xs:element name="FunctionalTitle" type="xs:string" minOccurs="0" />
<xs:element name="CorporateID" type="xs:string" minOccurs="0" />
<xs:element name="UserID" type="xs:int" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
  1. Validate the written Schema.
  2. Add an XML file (Say new dataset.xml) with the following data.
<?xml version="1.0" standalone="yes" ?>
<NewDataSet xmlns="http://tempuri.org/NewDataSet.xsd">
<roster>
<PositionID>12345</PositionID>
<EmployeeID>1000</EmployeeID>
<PersonID>01</PersonID>
<FirstName>Mary</FirstName>
<LastName>Elsa</LastName>
<BizUnitName>Software</BizUnitName>
<Title>Partner</Title>
<FunctionalTitle>Microsoft</FunctionalTitle>
<CorporateID>23</CorporateID>
<UserID>11</UserID>
</roster>
<roster>
<PositionID>345667</PositionID>
<EmployeeID>1001</EmployeeID>
<PersonID>02</PersonID>
<FirstName>Anu</FirstName>
<LastName>Roy</LastName>
<BizUnitName>Software1</BizUnitName>
<Title>Partner</Title>
<FunctionalTitle>xx</FunctionalTitle>
<CorporateID>56</CorporateID>
<UserID>12</UserID>
</roster>
<roster>
<PositionID>4655</PositionID>
<EmployeeID>65</EmployeeID>
<PersonID>542</PersonID>
<FirstName>Sam</FirstName>
<LastName>George</LastName>
<BizUnitName>HR</BizUnitName>
<Title>partner</Title>
<FunctionalTitle>yy</FunctionalTitle>
<CorporateID>345</CorporateID>
<UserID>55</UserID>
</roster>
</NewDataSet>
  1. Write a method to load data from XML file.
// Loads data from XML file.
private void LoadFromFile(string fileName)
{
	string remString = "\\bin\\debug";
	string path = Application.StartupPath.Remove(Application.StartupPath.Length - remString.Length, remString.Length)+ "\\" + fileName;
	NewDataSet newDataSet1 = new NewDataSet();
	newDataSet1.ReadXml(path);
	userCmbBox.DataSource =  newDataSet1.Tables [0];
	serCmbBox.DisplayMember = newDataSet1.roster.LastNameColumn.ColumnName;
	userCmbBox.ValueMember = newDataSet1.roster.EmployeeIDColumn.ColumnName;
	this.userCmbBox.ListBox.Grid.Model.Cols.Hidden[newDataSet1.roster.PersonIDColumn.ColumnName] = true;
	this.userCmbBox.ListBox.Grid.Model.Cols.Hidden[newDataSet1.roster.UserIDColumn.ColumnName] = true;
	this.userCmbBox.ListBox.Grid.Model.Cols.Hidden[newDataSet1.roster.EmployeeIDColumn.ColumnName] = true;
	this.userCmbBox.ListBox.Grid.Model.Cols.Hidden[newDataSet1.roster.PositionIDColumn.ColumnName] = true;
}
'Loads data from XML file.
Private Sub LoadFromFile(ByVal fileName As String)
Dim remString As String = "\bin\debug"
Dim path As String = Application.StartupPath.Remove(Application.StartupPath.Length - remString.Length, remString.Length)+ "\" & fileName
Dim newDataSet1 As NewDataSet = New NewDataSet()
newDataSet1.ReadXml(path)
userCmbBox.DataSource = newDataSet1.Tables(0)
serCmbBox.DisplayMember =newDataSet1.roster.LastNameColumn.ColumnName
userCmbBox.ValueMember =newDataSet1.roster.EmployeeIDColumn.ColumnName
Me.userCmbBox.ListBox.Grid.Model.Cols.Hidden(newDataSet1.roster.PersonIDColumn.ColumnName) = True
Me.userCmbBox.ListBox.Grid.Model.Cols.Hidden(newDataSet1.roster.UserIDColumn.ColumnName) = True
Me.userCmbBox.ListBox.Grid.Model.Cols.Hidden(newDataSet1.roster.EmployeeIDColumn.ColumnName) = True
Me.userCmbBox.ListBox.Grid.Model.Cols.Hidden(newDataSet1.roster.PositionIDColumn.ColumnName) = True
End Sub
  1. Load the values in the Form’s Load event.
private void Form1_Load(object sender, System.EventArgs e)
{
	LoadFromFile("newdataset.xml");
}
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
LoadFromFile("newdataset.xml")
End Sub