我有一个从数据库返回对象列表的方法。我使用Dictionary来连接ID和连接的字符串。我希望FillComboBox方法在单击后刷新组合框。这是FillComboBox代码:
private void FillComboBox()
{
List<Shift> shifts = null;
shifts = ShiftMenager.GetAllAsString();
if (shifts.Count != 0)
{
Dictionary<int, string> shiftsDict = null;
shiftsDict = new Dictionary<int, string>();
shiftsDict.Clear();
foreach (Shift sh in shifts)
{
shiftsDict.Add(sh.id, sh.startDate.ToShortDateString() +
" (" + sh.startDate.ToShortTimeString() + " - " +
sh.endDate.ToShortTimeString() + ") - " + sh.employee);
}
shiftComboBox.DisplayMember = "Value";
shiftComboBox.ValueMember = "Key";
shiftComboBox.DataSource = new BindingSource(shiftsDict, null);
}
else
{
shiftComboBox.Enabled = false;
}
}
我在
中放置了第一个FillComboBox()private void ShiftForm_Load(object sender, EventArgs e)
{
FillComboBox();
}
按钮点击事件中的第二个:
private void RefreshButton_Click(object sender, EventArgs e)
{
FillComboBox();
}
当表单加载时,everythings工作正常,但是当我点击一个按钮时,我收到一条消息“已经添加了一个具有相同键的项目。”。我真的无法找到解决方法,在填充之前尝试清除字典,先分配null。 怎么了?感谢。
答案 0 :(得分:0)
以下是调试问题的方法:
foreach (Shift sh in shifts)
{
if (shiftsDict.ContainsKey(sh.id))
{
// code to log breakpoint on it to debug
}
else
{
shiftsDict.Add(sh.id, sh.startDate.ToShortDateString() +
" (" + sh.startDate.ToShortTimeString() + " - " +
sh.endDate.ToShortTimeString() + ") - " + sh.employee);
}
}
答案 1 :(得分:0)
问题不是来自Combobox。错误的来源是您正在使用的字典。我确定您的代码正在尝试添加具有相同已添加密钥的重复条目。
只需确保集合shifts = ShiftMenager.GetAllAsString()
没有任何重复条目。