我有两本词典。一个包含Excel工作表中的列列表和已定义列的列表。我想知道工作表中是否存在已定义的列。如果它们存在,那么它们将在选定的下拉列表中进行选择。
在行 dropdownList.SelectedValue = selectedItem.First()。键; 我有时会得到一个错误消息序列不包含任何元素。我以为我编码了安全性。我忘了什么?
......命令......
SetDataSource(import.ColumnList, import.DefColumnList, ddlSomeColumn, SomeEnum.Zipcode);
...然后是调用方法......
private void SetDataSource(Dictionary<int, string> columnList, Dictionary<int, string> defColumnList, DropDownList dropdownList, SomeEnum item)
{
int index = (int)item;
dropdownList.BeginUpdate();
dropdownList.ValueMember = "Key";
dropdownList.DisplayMember = "Value";
dropdownList.DataSource = columnList;
if (defColumnList.ContainsKey(index) && defColumnList[index].Length > 0)
{
var selectedItem = columnList.Where(cl => cl.Value == defColumnList[index]);
if (selectedItem != null)
dropdownList.SelectedValue = selectedItem.First().Key;
}
dropdownList.EndUpdate();
}
答案 0 :(得分:2)
此错误的含义是当您尝试访问不可能的第一个元素时,selectedItem没有元素。
您应该检查集合中是否有任何元素,然后在集合中执行First
方法,而不是检查可空性。
var selectedItem = columnList.Where(cl => cl.Value == defColumnList[index]);
if (selectedItem.Any())
dropdownList.SelectedValue = selectedItem.First().Key;
答案 1 :(得分:1)
.Where()运算符返回枚举,而不是单个元素。因此,您的selectedeItem!= null条件始终返回true。将您的代码更改为:
private void SetDataSource(Dictionary<int, string> columnList, Dictionary<int, string> defColumnList, DropDownList dropdownList, SomeEnum item)
{
int index = (int)item;
dropdownList.BeginUpdate();
dropdownList.ValueMember = "Key";
dropdownList.DisplayMember = "Value";
dropdownList.DataSource = columnList;
if (defColumnList.ContainsKey(index) && defColumnList[index].Length > 0)
{
var selectedItem = columnList.FirstOrDefault(cl => cl.Value == defColumnList[index]);
if (selectedItem != null)
dropdownList.SelectedValue = selectedItem.Key;
}
dropdownList.EndUpdate();
}