如何访问方法之外的字典

时间:2013-12-28 11:41:00

标签: c# winforms dictionary listbox

其实我有两个问题。

我有一个名为FillPersonList的方法,它始终在表单启动时加载。在该方法内部,我访问数据库并将所需的值放入字典中。以前,添加新值时无法重新加载相关列表框。所以我创建了一个刷新按钮,当它被单击时,它使该listbox数据源为null并再次调用该FillPersonList方法。它运作正常。

现在我添加一个文本框。当用户键入单词时,列表框应根据该单词对自身进行排序。如果每次用户输入一个单词,我都不希望访问。所以我在该方法之外声明了前一个字典并在textBox中访问该方法改变了方法。好的,现在它也可以工作但输入后如果我清除文本框列表框只显示最后一个值。现在第二个问题是,如果我点击刷新按钮它会显示“ArgumentException”错误。

示例代码:

Dictionary<int, string> personListDictionary = new Dictionary<int, string>();
private void FillPersonList()
{
  //connect to database
  SqlCommand prsonListCmd = new SqlCommand(SQL_QUERY, conn);
  SqlDataReader dr = prsonListCmd.ExecuteReader();
    if (dr.HasRows)
      {
       while (dr.Read())
        {
          //Access value
          personListDictionary.Add(key, value); //Here ArgumentException occurs
        }
      }
      PersonList.DisplayMember = "Value";
      PersonList.ValueMember = "Key";
      PersonList.DataSource = new BindingSource(personListDictionary, null);
}

private void sortListBox_TextChanged(object sender, EventArgs e)
{
  //Access personListDictionary value
}

我只需要一个解决方案。如果我必须在FillPersonList方法中放入字典,我该如何访问它的值。或者,如果现在保持它如何重新加载数据库没有异常错误。

1 个答案:

答案 0 :(得分:0)

将我的评论转换为所要求的答案,很愉快:)

  

在从数据库重新加载数据时需要清理字典。也许错误是字典中的重复键。