C#将ListView项从函数传递到表单上的ListView?

时间:2013-06-14 08:00:30

标签: c# .net listview listviewitem

我正在尝试执行以下操作:

我有一个函数..查询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;
    }

3 个答案:

答案 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)

旁注:最好使用usingSqlCommand的{​​{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;
}