1

我有这段代码可以将字典分配给组合框:

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?

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

DisplayMember并且ValueMember是组合框的属性,而不是其中包含的项目的属性。正如错误所说,组合框中的项目是 type Object,所以如果你想访问它们的属性,你必须先进行强制转换。您的数据源的类型Dictionary<String, String>是 的集合KeyValuePair<string,string>,因此在foreach循环中您必须使用这种类型(有两种可能的方法):

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 回答