0

我有一个从数据库返回对象列表的方法。我使用字典来连接 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();
    }

当表单加载时一切正常,但是当我单击按钮时,我收到一条消息“已添加具有相同键的项目。”。我真的找不到解决方法,在填充它之前尝试清除字典,首先分配 null 。怎么了?谢谢。

4

2 回答 2

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);
  }
}
于 2013-10-15T16:11:24.903 回答
0

问题不是来自组合框。错误的来源是您正在使用的字典。我确定您的代码正在尝试添加具有相同已添加密钥的重复条目。

只需确保该集合shifts = ShiftMenager.GetAllAsString()没有任何重复条目即可。

于 2013-10-15T16:20:45.773 回答