ListView:未正确添加项目

时间:2013-08-09 22:27:42

标签: c# listview listviewitem

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

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

{
     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();
}

2 个答案:

答案 0 :(得分:1)

虽然您的问题与遗产ListView有关。出于像您这样的目的,在ListView中使用VirtualMode更合适(请参阅ListView.VirtualMode)。此外,如果你想尝试新的和更强大的BrightIdeasSoftware.ObjectListView(OLV),这是第三方控制更好。您可以轻松地在OLV中添加项目(将是对象:)。它还有很多造型工具。看看它here

答案 1 :(得分:0)

Listview的第1列是您制作Items.Add()的地方,第二列是您使用SubItems.Add()的地方。换句话说,seocnd列和更高版本与第二列相关联。

为了说明它会是这样的:

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

现在在你的情况下它有点棘手,因为多个记录将变成多个列ala Pivot Table。因此,我建议在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='';
         }

     }