我有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();
}
答案 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='';
}
}