我正在尝试执行以下操作:
我有一个函数..查询SQL并从数据库中获取一些数据..现在我想在表单上的列表视图中显示这些值。该函数位于SQL类中。
它仅适用于一个项目,但如果我想要传递5个项目,它将无法工作,因为它只传递最后一次,这在您看到代码时是合乎逻辑的。
我似乎无法弄明白,如何从表单中“重新”一个listvie对象到函数并将项目传递给它。
这是代码:(我知道它现在只返回一个项目,我尝试了不同的东西..没有用):
public ListViewItem SQL_GetLogsHistory(string WKS)
{
SqlCommand mySQLCommand = new SqlCommand(Properties.Settings.Default.SQL_GetLogsHistroy, SQLconn);
mySQLCommand.Parameters.AddWithValue("@WKS", WKS);
SqlDataReader reader = mySQLCommand.ExecuteReader();
ListViewItem item = new ListViewItem();
while (reader.Read())
{
item = new ListViewItem(new[] {
reader.GetValue(4).ToString(), // Timestamp
reader.GetValue(2).ToString() // Log
});
}
reader.Close();
return item;
}
答案 0 :(得分:3)
你可以有物品清单
List<ListViewItem> items = new List<ListViewItem>();
在你的循环中创建新的ListViewItem
并设置属性并将其添加到列表
while (reader.Read())
{
ListViewItem item = new ListViewItem();
item = new ListViewItem(new[] {
reader.GetValue(4).ToString(), // Timestamp
reader.GetValue(2).ToString() // Log
});
items.Add(item);
}
最后从方法返回items
并更改方法的签名,如下所示
public List<ListViewItem> SQL_GetLogsHistory(string WKS)
旁注:最好使用using
和SqlCommand
的{{1}}语句
SqlDataReader
答案 1 :(得分:3)
你可以使用收益率回报:
public IEnumerable<ListViewItem> SQL_GetLogsHistory(string WKS)
{
SqlCommand mySQLCommand = new SqlCommand(Properties.Settings.Default.SQL_GetLogsHistroy, SQLconn);
mySQLCommand.Parameters.AddWithValue("@WKS", WKS);
SqlDataReader reader = mySQLCommand.ExecuteReader();
ListViewItem item = new ListViewItem();
while (reader.Read())
{
yield return new ListViewItem(new[] {
reader.GetValue(4).ToString(), // Timestamp
reader.GetValue(2).ToString() // Log
});
}
reader.Close();
return item;
}
这将减少您的数据的多次枚举。然后,您可以根据需要使用此方法创建List<ListViewItem>
:
var list = SQL_GetLogsHistory(WKS).ToList();
或者您可以直接将其用作列表视图数据源:
listView.DataSource = SQL_GetLogsHistory(WKS);
答案 2 :(得分:1)
你只需要像这样返回List<ListViewItem>
吗?
public List<ListViewItem> SQL_GetLogsHistory(string WKS)
{
SqlCommand mySQLCommand = new SqlCommand(Properties.Settings.Default.SQL_GetLogsHistroy, SQLconn);
mySQLCommand.Parameters.AddWithValue("@WKS", WKS);
SqlDataReader reader = mySQLCommand.ExecuteReader();
List<ListViewItem> items = new List<ListViewItem>();
while (reader.Read())
{
var item = new ListViewItem(new[] {
reader.GetValue(4).ToString(), // Timestamp
reader.GetValue(2).ToString() // Log
});
items.Add(item);
}
reader.Close();
return items;
}