2012-11-29 84 views
2

我有一個字典,它的鍵爲三個字母的國家代碼,而其值爲國家的名稱。使用字典鍵和值填充DataGridViewComboBoxColumn

Dictionary<string, string> CountryList=new Dictionary<string, string>(); 

我也有一個DataGridView和一個DataTable。我想要做的是爲我的DataTable列中顯示國家信息的某些列創建一個DataGridViewComboBoxColumn。因此,例如,我的DataTable中的一列被稱爲Country,我希望該列具有一個顯示國家名稱的下拉組合框,並且在選中時填充DataTable中的單元格用字典中的關鍵字(三字母代碼)。不過,我完全被困在如何做到這一點。我是否必須將數據源設置爲鍵,將DisplayMember設置爲這些值?我試過了,並且得到了一個錯誤:

DataGridViewComboBoxColumn buildCountries = new DataGridViewComboBoxColumn(); 
buildCountries.HeaderText = "List of Countries"; 
buildCountries.DataSource = CountryList.Keys.ToString(); 
buildCountries.DisplayMember = CountryList.Values.ToString(); 

Complex DataBinding accepts as a data source either an IList or an IListSource

我不知道如何去這樣做。

回答

3

我不是100%肯定的,但我認爲你將無法按照你嘗試的方式完成。我知道這可能會被視爲重型火炮,但你可以在Dictionary之外創建一個DataTable,並對其執行DataBinding

DataGridViewComboBoxColumn buildCountries = new DataGridViewComboBoxColumn(); 
buildCountries.HeaderText = "List of Countries"; 
DataTable dataTable = new DataTable(); 
dataTable.Columns.Add("Keys"); 
dataTable.Columns.Add("Values"); 
KeyValuePair<string, string> [] array = CountryList.ToArray(); 
foreach(KeyValuePair<string, string> kvp in array) 
{ 
     dataTable.Rows.Add(kvp.Key, kvp.Value); 
} 
buildCountries.DataSource = dataTable; 
buildCountries.DisplayMember = "Values"; 
buildCountries.ValueMember = "Keys"; 
dataGridView1.Columns.Add(buildCountries); 
1

使用Keys.ToString(),您正在創建一個表示Keys集合的String,而不是獲取鍵列表。這將返回:

System.Collections.Generic.Dictionary'2+KeyCollection[System.String,System.String]

DisplayMember是應該在組合框中顯示每個項目的數據源屬性的名稱 - 這大概應該是"Value"

試試這個:

Dictionary<string, string> CountryList=new Dictionary<string, string>(); 

DataGridViewComboBoxColumn buildCountries = new DataGridViewComboBoxColumn(); 
buildCountries.HeaderText = "List of Countries"; 
buildCountries.DataSource = CountryList.ToArray(); 
buildCountries.ValueMember = "Key"; 
buildCountries.DisplayMember = "Value"; 

CountryList.ToArray()會給你的KeyValuePair<string, string>秒的陣列,它確實實現IList。

如果您想獲得所選的國家/地區代碼,請使用buildCountries.SelectedValue

0

可以使用下面設置一個字典作爲數據源的一個DataGridViewComboBoxColumn

buildCountries .DisplayMember = "Key"; 
buildCountries .ValueMember = "Value"; 
buildCountries .DataSource = new BindingSource(CountryList, null);