Q:

How to Store IDs and Names with a Single ComboBox? 

I'm populating a drop-down list (ComboBox) with data retrieved via stored procedure. 
DataTable dtCustomer = da. ExecuteProcedureWithRS("pCustomerList_s", p, parms); //get data
foreach (DataRow dr in dtCustomer. Rows) //loop through DataTable rows
{
    CustomerNameBox. Items. Add(dr[1]); //add customer name to combobox
}

This is fairly easy.  However, at position 0 in each row is the ID of the customer, of which I also want to keep track, and associate with the name in CustomerNameBox. 
A colleague mentioned I can make another dropdown, hide it, and do the following:
foreach (DataRow dr in dtCustomer. Rows) //loop through DataTable rows
{
    CustomerIDBox. Items. Add(dr[0]); //add customer ID to combobox
    CustomerNameBox. Items. Add(dr[1]); //add customer name to combobox    
}

Then I can match names to IDs 1:1 by grabbing a name from the NameBox and its ID from the IDBox - e.g. var id = CustomerIDBox. Items[16]; var name = CustomerNameBox. Items[16]
This seems like a kludge to me.  I'm aware I can use a Dictionary<string, int> or similar to store key-value pairs, but is there some way to store the ID and name natively with a single ComboBox? 

A:

Try like this:
Where
"Key" and "Value"  are column name in your datatable
this.comboBox1.DataSource = yourdatatable;
this.comboBox1.DisplayMember = "Key";
this.comboBox1.ValueMember = "Value";

OR with Loop
for(int i=0; i<dtCustomer. Rows. Count();i++)
{
    comboBox1.Items. Add(new ListItem(dtCustomer. Rows[i][0], dtCustomer. Rows[i][1]))
}

