在我的主要表格中,我有以下代码
[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查询返回的最后一个值。我错过了什么?
答案 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类。现在一切都按预期工作,感谢您尝试解决问题的建议。