2013-08-17 4 views
0

Я пытаюсь добавить значение в поле со списком. Я могу установить текст, но не значение. Я знаю, что могу заполнить combobox с помощью данных, но я хочу сделать это вручную, чтобы полностью контролировать отображение данных. Я могу сделать ComboBox.Items.Add(), но это просто устанавливает текст. Как добавить значение (которое будет основным ключом, отличным от текста)?Добавление значения в ComboBox в C# WinForm

public Form1() 
    { 
     InitializeComponent(); 
     OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Drew\Documents\Visual Studio 2012\Projects\Football\Football\db\FB_DB.mdb;User Id=admin;Password=;"); 

     //Load QB DropDown 
     conn.Open(); 
     OleDbCommand cmd = new OleDbCommand("select PlayerID,LastName,FirstName from tb_players where Pos = 'QB' Order By LastName", conn); 
     OleDbDataReader reader = cmd.ExecuteReader(); 

     string plyrName = ""; 

     while (reader.Read()) 
     { 
      plyrName = reader["LastName"].ToString() + ", " + reader["FirstName"].ToString(); 
      cbQb.Items.Add(plyrName); 
     } 
     conn.Close(); 
    } 
+0

Добавить объект затем использовать 'DisplayMember' (или переопределить объекты в строку) – Sayse

+0

См. http://stackoverflow.com/questions/10062810/c-sharp-combobox-with-text-and-value – Gonzix

ответ

0

Попробуйте это:

public Form1() 
{ 
    InitializeComponent(); 
    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Drew\Documents\Visual Studio 2012\Projects\Football\Football\db\FB_DB.mdb;User Id=admin;Password=;"); 

    //Load QB DropDown 
    conn.Open(); 
    OleDbCommand cmd = new OleDbCommand("select PlayerID,LastName,FirstName from tb_players where Pos = 'QB' Order By LastName", conn); 
    OleDbDataReader reader = cmd.ExecuteReader(); 

    string plyrName = ""; 
    int keyValue; 

    cbQb.DisplayMember = "Value"; 
    cbQb.ValueMember = "Key"; 

    while (reader.Read()) 
    { 
     plyrName = reader["LastName"].ToString() + ", " + reader["FirstName"].ToString(); 
     index = Convert.ToInt32(reader["primaryKeyColumnValue"]); 

     KeyValuePair<int, string> cmbItem = new KeyValuePair<int, string> (index ,plyrName) 
     cbQb.Items.Add(cmbItem); 
    } 
    conn.Close(); 
} 

Вы можете получить значение ключа выбранного элемента, как это:

((KeyValuePair<int, string>)cbQb.SelectedItem).Key 
+0

Awesome. Этот сэр именно то, что я искал. Мне пришлось изменить «index» на «keyValue», но легко отлаживать. Спасибо огромное! –