1

Dictionary をコンボボックスに割り当てるには、次のコードを使用します。

Dictionary<String, String> dict = ReportRunnerConstsAndUtils.GetReportGeneratorsDictionary();
comboBoxReportRunners.DataSource = new BindingSource(dict, null);
comboBoxReportRunners.DisplayMember = "Key";
comboBoxReportRunners.ValueMember = "Value";

アイテムの DisplayMembers と ValueMembers が期待どおりであることを確認したいと思います。これは、それをテストする論理的な方法のようです。

foreach (var v in comboBoxReportRunners.Items)
{
    MessageBox.Show(v.DisplayMember.ToString());
    MessageBox.Show(v.ValueMember.ToString());
}

...しかし、コンパイルされません。「'object' には 'DisplayMember' の定義が含まれておらず、タイプ 'object' の最初の引数を受け入れる拡張メソッド 'DisplayMember' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)」」 「ValueMember」の同じエラーメッセージ

各アイテムの DisplayMember と ValueMember として格納されている値を (1 回だけ) 確認するには何が必要ですか?

4

2 に答える 2

3

この方法を試してください:

foreach (KeyValuePair<string,string> v in comboBoxReportRunners.Items)
{
    MessageBox.Show(v.Key.ToString());
    MessageBox.Show(v.Value.ToString());
}  

ディクショナリは KeyValuePair を使用してデータを保存します

于 2015-12-28T17:42:01.203 に答える
2

DisplayMemberValueMemberはコンボ ボックスのプロパティであり、それに含まれる項目のプロパティではありません。エラーが示すように、コンボ ボックス内のアイテムのタイプObjectは であるため、それらのプロパティにアクセスする場合は、最初にキャストする必要があります。データ ソースのタイプDictionary<String, String>は のコレクションでKeyValuePair<string,string>あるため、foreachループではこのタイプを使用する必要があります (2 つの方法があります)。

foreach (KeyValuePair<string,string> v in comboBoxReportRunners.Items)
{
    MessageBox.Show(v.Key.ToString());
    MessageBox.Show(v.Value.ToString());
}

また

foreach (var v in comboBoxReportRunners.Items)
{
    KeyValuePair<string,string> val = v as KeyValuePair<string,string>;
    MessageBox.Show(val.Key.ToString());
    MessageBox.Show(val.Value.ToString());
}
于 2015-12-28T17:49:54.783 に答える