2013-08-17 25 views
0

我正在嘗試向ComboBox添加一個值。我可以設置文字,但不是價值。我知道我可以使用數據表來填充組合框,但我想手動執行以保持對數據顯示的完全控制。我可以做ComboBox.Items.Add(),但它只是設置文本。如何添加值(這將是一個主鍵,與文本不同)?在C#中向ComboBox添加值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

太棒了。那位先生正是我所期待的。我不得不將「索引」更改爲「keyValue」,但易於調試。非常感謝! –