将查询中的多个项目加载到组合框中

时间:2012-08-11 06:16:48

标签: c# .net wpf class ado.net

我在.Net framework 4.0中有一个WPF表单。我要做的是用一个查询结果填充一个组合框。我可以做到这一点,但为了防止重复代码,我试图有一个类,我可以使用/调用我想填充的每个组合框(多个组合框将共享来自同一查询的结果)。

我构建了我的课程如下:

 internal class DatabaseHandle
    {
        private string _connectionString =
            "Data Source=FINALLYWINDOWS7\\TESTING;Initial Catalog=Testing;Integrated Security=true";

        public string PopulateTeamMembers()
        {
            string queryString = "select    setting_main"
                                 + " from     [marlin].[support_config]"
                                 + " where  config_code = 30"
                                 + "         and setting_active = 1"
                                 + " order by setting_main";

            using (var connection = new SqlConnection(_connectionString))
            {
                var command = new SqlCommand(queryString, connection);

                try
                {
                    connection.Open();
                    SqlDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        return reader[0].ToString();
                    }

                    reader.Close();
                }
                catch (Exception ex)
                {
                    return "Error, unable to load";
                }
            }
            return null;
        }
    }

然后在另一个班级我有以下方法:

private void LoadInterface()
{
    DatabaseHandle testing = new DatabaseHandle();
    string teammembers = testing.PopulateTeamMembers();

    comboBoxResolvedBy.Items.Add(teammembers);
}

这会填充我的组合框,只是它只使用查询中的第一个值填充它。我已经检查了数据,一切都是正确的,但我似乎无法弄清楚如何枚举LoadInterface方法的查询结果。

1 个答案:

答案 0 :(得分:1)

请注意,当该函数点击return关键字时,它会退出您的函数。 这就是为什么它只返回一个值。它也没有调用reader.close

您应该以{{1​​}}的形式返回多个值,而不是IEnumerable<string>

解决此问题的方法是填充列表。

string

然后您可以这样称呼它:

    public IEnumerable<string> PopulateTeamMembers()
    {
        List<string> returnList = new List<string>();
        string queryString = "select    setting_main"
                             + " from     [marlin].[support_config]"
                             + " where  config_code = 30"
                             + "         and setting_active = 1"
                             + " order by setting_main";

        using (var connection = new SqlConnection(_connectionString))
        {
            var command = new SqlCommand(queryString, connection);

            try
            {
                connection.Open();
                using(SqlDataReader reader = command.ExecuteReader())
                {
                   while (reader.Read())
                   {
                       returnList.Add(reader[0].ToString());
                   }

                   reader.Close();
                }
            }
            catch (Exception ex)
            {
                // Just let the calling class handle the exception
                throw;
            }
        }
        return returnList;
    }
相关问题