在ListView中显示Database中的多个列

时间:2012-04-30 21:50:30

标签: c# database listview

我不确定为什么这不起作用。我试图在我的表单上的列表视图框中并排显示我的数据库中的2列。当我使用它时,它不会正确显示任何数据。

    ("SELECT Person FROM tblPeople" + " SELECT Occur FROM tblpeople" , conn);  

try
{
    SqlDataReader reader = cmd.ExecuteReader();

    while (reader.Read())
    {
       listView1.Items.Add(reader["People"].ToString());
       listView1.Items.Add(reader["Occur"].ToString()); 
    }

所以我正在寻找我的数据显示如下:

    John   3
    James  4
    Frank  1

由于这些名称来自人物栏目,而且这些数字来自专栏。

2 个答案:

答案 0 :(得分:4)

要获得所需效果,您应将视图样式设置为Details,并将第二列值添加为子项。

基本上,你应该这样做:

  listView1.View = View.Details;

  listView1.Columns.Add("People");
  listView1.Columns.Add("Occur");

  while (reader.Read())
  {
      var item = new ListViewItem();
      item.Text = reader["People"].ToString();        // 1st column text
      item.SubItems.Add(reader["Occur"].ToString());  // 2nd column text
      listView1.Items.Add(item);
  }

答案 1 :(得分:0)

方法Add()每次向集合添加新项目时都会添加。如果您的项目包含来自两个对象的值,则最简单的方法可能是创建一个新项目来封装它,这样您就可以轻松地将其绑定到控件上。

考虑这样的事情:

public class MyNewObject
{
    public string People { get;set; }
    public string Occur { get;set; }

    public MyNewObject(string p, string o)
    { 
        People = p;
        Occur = o;
    }
}

然后只是

while (reader.Read())
{
    listView1.Items.Add(new MyNewObject(reader["People"].ToString(),reader["Occur"].ToString()));
}