用于刷新组合框的按钮。 “已添加具有相同键的项目”

时间:2013-10-15 16:06:35

标签: c#

我有一个从数据库返回对象列表的方法。我使用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。 怎么了?感谢。

2 个答案:

答案 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()没有任何重复条目。