0

我有 3 个列(1996、1997、1998),它们来自数据库。我想在列表视图中显示它们。

我的问题是,它完美地显示了所有第一列数据,但第二列数据在第一列结束后开始。此外,最后两列放在一起。

{
     listView1.Items.Clear();
     SqlConnection cnn = new SqlConnection(tools.ConnectionString);
     SqlCommand cmd = new SqlCommand("alti", cnn);
     cmd.CommandType = CommandType.StoredProcedure;

     cmd.Parameters.AddWithValue("@name", comboBox1.SelectedItem);
     cnn.Open();
     SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

     while (dr.Read())
     {
         int yil = Convert.ToInt32(dr["yil"].ToString());
         ListViewItem lvitem = new ListViewItem();

         if (yil == 1996)
         {
             lvitem.Text =(dr["OrderID"].ToString() + "--" + dr["Fiyat"].ToString() );
         }
         else if (yil == 1997)
         {
             lvitem.SubItems.Add(dr["OrderID"].ToString() + "--" + dr["Fiyat"].ToString());
         }
         else if (yil == 1998)
         {
             lvitem.SubItems.Add(dr["OrderID"].ToString() + "--" + dr["Fiyat"].ToString());                   
         }
             listView1.Items.Add(lvitem);                   
     }
         cnn.Close();
}
4

2 回答 2

1

虽然您的问题是关于 legacy ListView。对于像您这样的目的,使用ListViewinVirtualMode更合适(请参阅 参考资料ListView.VirtualMode)。此外,如果您想尝试一些新的、更强大的BrightIdeasSoftware.ObjectListView(OLV)第三方控件,那就更好了。您可以在 OLV 中添加您的项目(这将是对象 :)),难度较小。它也有很多造型工具。看看这里

于 2013-08-10T04:34:33.947 回答
0

Listview 的第一列是您创建 Items.Add() 的地方,第二列及以后是您使用 SubItems.Add() 的地方。换句话说, seocnd 列及以后的列与第二列相关联。

为了说明它会是这样的:

ListViewItem itm = listView1.Items.Add('First Column');
itm.SubItems.Add('Second Column');
itm.SubItems.Add('Third Column');

现在,在您的情况下,这有点棘手,因为多条记录将变成多列,例如数据透视表。所以,我建议先收集 1996 年到 1997 年的所有年份,然后再将其添加到 listview 中,例如:

 String for96='',for97='',for98='';

 while (dr.Read())
     {
         int yil = Convert.ToInt32(dr["yil"].ToString());


         if (yil == 1996)
         {
             for96 =(dr["OrderID"].ToString() + "--" + dr["Fiyat"].ToString() );
         }
         else if (yil == 1997)
         {
             for97 = dr["OrderID"].ToString() + "--" + dr["Fiyat"].ToString();
         }
         else if (yil == 1998)
         {
             for98=dr["OrderID"].ToString() + "--" + dr["Fiyat"].ToString();                
         }
         if (!String.IsNotNullOrEmpty(for96) && !String.IsNotNullOrEmpty(for97) && !String.IsNotNullOrEmpty(for98))
         {
             ListViewItem itm = new ListViewItem();
             itm = listView1.Items.Add(for96);
             itm.SubItems.Add(for97);          
             itm.SubItems.Add(for98);      

             for96='',for97='',for98='';
         }

     }
于 2013-08-10T00:02:59.287 回答