在构造函数中导入数组值

时间:2014-06-02 22:56:33

标签: c# foreach

在我的主要表格中,我有以下代码

    [ImportingConstructor]
    public MainForm([ImportMany] IEnumerable<AudioPlugin> content)
    {
        InitializeComponent();
        listBox.DisplayMember = "Name";
        foreach (var listing in content)
        {
            listBox.Items.Add(listing);
        }
    }

在我的AudioPlugin类中,我有以下代码

    [Export(typeof(INAudioPlugin))]
    public class RecordingPanelPlugin : AudioPlugin
    {
        private string _customer { get; set; }

        public void ConnectionString()
        {
            using (var conn = new SqlCeConnection("Data Source=MyDatabase.sdf;Password=pass;Persist Security Info=True"))
            {
                conn.Open();
                var comm = new SqlCeCommand("SELECT * FROM main", conn);
                SqlCeDataReader reader = comm.ExecuteReader();

                while (reader.Read())
                {
                    _customer = (string)(reader["CustomerName"]);
                    Console.WriteLine(_customer);
                }
            }
        }


        public string Name
        {
            get
            {
                ConnectionString();
                return _customer;
            }
        }

        public Control CreatePanel()
        {
            return new RecordingPanel();
        }
    }

使用代码,我只获取SQL查询返回的最后一个值。我错过了什么?

2 个答案:

答案 0 :(得分:0)

您将最后一个读取元素的值分配给变量_customer,您应该使用数据结构(如List)来保留您正在获取的所有元素,然后将其传递给构造函数。 您的代码应该以这种方式修复:

private List<string> _customers = new List<string>();

        public void ConnectionString()
        {
            using (var conn = new SqlCeConnection("Data Source=MyDatabase.sdf;Password=pass;Persist Security Info=True"))
            {
                conn.Open();
                var comm = new SqlCeCommand("SELECT * FROM main", conn);
                SqlCeDataReader reader = comm.ExecuteReader();

                string customer;
                while (reader.Read())
                {
                    customer = (string)(reader["CustomerName"]);
                    Console.WriteLine(customer);
                    _customers.Add(customer);
                }
            }
        }

答案 1 :(得分:0)

我想我过度思考这个问题了。我从两个类中删除了导入/导出,而是决定直接在我的主窗体中调用查询,以便我可以根据需要填充列表框。然后我将一个变量分配给listbox.SelectedItem并将其传递给AudioPlugin类。现在一切都按预期工作,感谢您尝试解决问题的建议。