将字符串列表附加到ComboBox

时间:2017-07-05 07:18:36

标签: c# sql sql-server

所以我有一个List<T>,其中类型T是整数。现在我从一个使用SqlDataReader读取我的数据库记录(DBMS:Sql Server)的函数中检索此列表。基本上我想要做的是检查如果列表说,返回以下内容:

1
7
4

我想对字符串列表(List <string> outcome = new List<string>())进行比较,其中:

1 = apples
7 = bananas
4 = oranges

最后将这些字符串添加到列表中,然后将它们绑定到我的C#Windows窗体应用程序中的ComboBox控件。

方法的问题是我使用if-condition来检查整数(我从数据库中检索的)是否存在于初始列表中,在这种情况下我们可以调用List<int> checkInt = new List<int>())存在,如果是,则将字符串(Banana, apple, oranges or whatever)添加到outcome列表。

以下是实际代码:

  public List<int> getSubGroupsBelongingToUser()
        {
            List<int> DepartmentSubGroupIds = new List<int>();

            myConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            using (mySQLConnection = new SqlConnection(myConnectionString))
            {
                SqlParameter parameter = new SqlParameter("@UserId", getUserID(cbxSelectUser.Text));
                mySQLCommand = new SqlCommand("Test", mySQLConnection);
                mySQLCommand.CommandType = CommandType.StoredProcedure;
                mySQLCommand.Parameters.Add(parameter);
                mySQLConnection.ConnectionString = myConnectionString;
                mySQLConnection.Open();

                SqlDataReader sqlDataReader = mySQLCommand.ExecuteReader();
                while (sqlDataReader.Read())
                {
                    DepartmentSubGroupIds.Add(Convert.ToInt32(sqlDataReader["DepartmentSubGroupId"]));
                }
            }
            return DepartmentSubGroupIds;
        }

因此上面的函数将返回1 and 3。我将其称为如下:

  private List<string> getSubGroupPerID()
        {
            List<string> outcome = new List<string>();

            if (getSubGroupsBelongingToUser().Contains(1))
            {
                outcome.Add("Apple");
            }
            else if (getSubGroupsBelongingToUser().Contains(2))
            {
                outcome.Add("Oranges");
            }
            else if (getSubGroupsBelongingToUser().Contains(3))
            {
                outcome.Add("Pineapples");
            }           
            else
            {
                outcome.Add("All");
            }
            return outcome;
        }

现在的问题是,一旦执行,编译器将检查if条件,如果它是真的,它将only添加一个水果并完成执行(这正是if条件如何获得执行)。但我希望它检查所有.Contains(int),如果这些比较相遇,那么只在最后添加水果。我已经知道问题是什么,我使用if条件。在认识到上述内容后,如何才能得到我想要的结果?

注意:由于时间限制,我没有改变我的实际代码以匹配我给出的水果示例,但肯定你应该得到我想要完成的任务。

1 个答案:

答案 0 :(得分:4)

您可以使用Dictionary

    Dictionary<int, string> fruit = new Dictionary<int, string>();

    fruit.Add(1, "Apple");
    fruit.Add(2, "Oranges");
    fruit.Add(3, "Pineapple");

    private List<string> getSubGroupPerID()
    {
        List<string> outcome = new List<string>();
        List<int> keys = getSubGroupsBelongingToUser();

        if(keys.Count > 0)
        {
            foreach(int key in keys)
            {
                outcome.Add(fruit[key]);
            }
        }      
        else
        {
            outcome.Add("All");
        }

        return outcome;
    }

如果您更喜欢使用的模式,问题是您if-else那里。这意味着,如果第一个条件为真,则其他条件不会被检查。您只需使用if即可解决此问题,然后检查是否添加了任何内容:

    private List<string> getSubGroupPerID()
    {
        List<string> outcome = new List<string>();

        if (getSubGroupsBelongingToUser().Contains(1))
        {
            outcome.Add("Apple");
        }
        if (getSubGroupsBelongingToUser().Contains(2))
        {
            outcome.Add("Oranges");
        }
        if (getSubGroupsBelongingToUser().Contains(3))
        {
            outcome.Add("Pineapples");
        }           
        if(outcome.Count == 0)
        {
            outcome.Add("All");
        }
        return outcome;
    }