The items in a combo-box are like items in any other collection; they have an auto-incrementing zero-based index. In order to accomplish what you are asking, you would need to insert 'dummy' entries for the indexes that you do not have in the table. In your example, this would for indexes 0, 2, and 4.
What you really want to do, is add Key-Value pair objects into your item collection. There are varying ways to do this depending on whether you're using Forms, WPF, or Web controls. Since you use the term 'ComboBox' I'm going to assume you're using Forms. In this case the simplest thing to do is add KeyValuePair objects to your item collection as follows:
comboBox.DisplayMember = "Value";
foreach (DataRow row in dt.Rows)
{
comboBox.Items.Add(
new KeyValuePair<int, string>(
Convert.ToInt32(row[0]),
Convert.ToString(row[1])));
}
The first line sets the member you want displayed as text in your combo-box. By default the toString method is called, which will leave you with something like "[1, john]". Setting DisplayMember to "Value" will cause only "john" to be displayed. You can then access the values of the selected item as follows:
if (comboBox.SelectedItem is KeyValuePair<int, string>)
{
int selectedKey = ((KeyValuePair<int, string>)comboBox.SelectedItem).Key;
string selectedValue = ((KeyValuePair<int, string>)comboBox.SelectedItem).Value;
}
else
{
}