2012-11-29 86 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);