3

キーとして3文字の国コード、値として国の名前を持つ辞書があります。

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

DataGridViewとDataTableもあります。私がやりたいのは、DataTableの特定の列(国情報を表示する列)に対してDataGridViewComboBoxColumnを作成することです。たとえば、DataTableの列の1つがと呼ばれCountry、その列に国の名前を表示するドロップダウンコンボボックスを配置し、選択すると、DataTableのセルに次のように入力します。辞書からのキー(3文字のコード)。しかし、私はこれを行う方法について完全に困惑しています。DataSourceをキーに設定し、DisplayMemberを値に設定する必要がありますか?私はそれを試しましたが、エラーが発生しました:

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

Complex DataBindingは、IListまたはIListSourceのいずれかをデータソースとして受け入れます

これをどうやってやるのかわかりません。

4

3 に答える 3

5

を使用Keys.ToString()すると、キーのリストを取得するのではなく、キーコレクションを表す文字列を作成します。これは戻ります:

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

DisplayMemberは、ComboBoxに表示されるDataSourceの各アイテムのプロパティの名前です。これはおそらく"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を実装するsの配列を提供します。

選択した国コードを取得する場合は、を使用しますbuildCountries.SelectedValue

于 2012-11-29T21:40:29.217 に答える
4

私は100%ポジティブではありませんが、あなたが試みていた方法でこれを達成することはできないと思います。私はこれが重砲と見なされるかもしれないことを知っていますが、あなたはそれからを作成しDataTableてそれDictionaryを実行することができます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);
于 2012-11-29T21:59:31.157 に答える
1

以下を使用して、DataGridViewComboBoxColumnのデータソースとして辞書を設定できます。

 buildCountries .DisplayMember = "Key";
 buildCountries .ValueMember = "Value";
 buildCountries .DataSource = new BindingSource(CountryList, null);
于 2017-07-25T01:33:43.430 に答える