使用列数据填充Listview

时间:2013-05-23 15:33:13

标签: c# listview

您好我按照填充列表视图的答案,但列表视图是水平填充,但我需要它填充列明智 这是我的代码

listView1.Items.Clear();
listView1.Columns.Clear();

Dictionary<string, List<string>> Values = new Dictionary<string, List<string>>();
Values.Add("CODE", list_p_code);
Values.Add("NAME", list_p_name);
Values.Add("MRP", list_mrp);
Values.Add("ORDERS", list_order_qty);
Values.Add("PENDING", list_variance_qty);

foreach (string key in Values.Keys)
{
    listView1.Columns.Add(key, -2,HorizontalAlignment.Left);
    // Fill item
    ListViewItem item = new ListViewItem(key);

    // Fill Sub Items
    List<string> list = Values[key];

    foreach (string data in list)
    {
        item.SubItems.Add(data.ToString());
    }

    // Add to the ListView
    listView1.Items.Add(item);

}

输出如下:

CODE 1 2
NAME x y
ORDERS 4 4
...

但我希望它为

CODE NAME ORDERS ...
1    x    4
2    y    4

我该怎么做?

3 个答案:

答案 0 :(得分:0)

CODE, NAME, ORDERS添加为列标题,而不是行的一部分。然后添加{1,x,4}&amp; {2,y,4}作为之前的行数据。

listview.Columns.Add()

答案 1 :(得分:0)

来自MSDN的示例:这是你添加的方式(项目和子项目,然后是下一个项目及其子项目):

// Create three items and three sets of subitems for each item.
ListViewItem item1 = new ListViewItem("CODE",0);
item1.SubItems.Add("NAME");
item1.SubItems.Add("ORDERS");
ListViewItem item2 = new ListViewItem("1",1);
item2.SubItems.Add("x");
item2.SubItems.Add("4");
ListViewItem item3 = new ListViewItem("2",2);
item3.SubItems.Add("y");
item3.SubItems.Add("4");

基于:http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.items.aspx

答案 2 :(得分:0)

很难理解你想做什么。如果你想:

CODE NAME ORDERS ...
1    x    4
2    y    4

然后很自然地认为,你有一组具有这3个字段的项目,并且每个项目代码都有相应的名称&amp;订单计数。

现在,您的数据结构设计绝对不正确!这就是你遇到问题的原因!

让我们来看看你的代码:

  1. 如果list_p_code.Length!= list_p_name.Length怎么办?您如何预期 listView 显示该内容?
  2. 您在实际添加列表项的同一周期中动态添加列。这是每个迭代中出现的新列。但是,您如何预期在之前添加项目所有列都已初始化?想一想。
  3. 正确数据结构的示例。请注意,您应该在开始迭代项目之前初始化所有列。

    public class YourItem
    {
        public string Code { get; set; }
        public string Name { get; set; }
        public string MRP { get; set; }
        public int OrdersCount { get; set; }
        public int PendingCount { get; set; }           
    }
    
    void YourHandler()
    {
        listView1.Items.Clear();
        listView1.Columns.Clear();
    
        var items = new[] 
        {
            new YourItem { Code = "Code1", Name = "Name1", MRP = "MRP1", OrdersCount = 1, PendingCount = 1 },
            new YourItem { Code = "Code2", Name = "Name2", MRP = "MRP2", OrdersCount = 2, PendingCount = 2 },
            new YourItem { Code = "Code3", Name = "Name3", MRP = "MRP3", OrdersCount = 3, PendingCount = 3 },
        };
    
        listView1.Columns.Add("CODE", -2,HorizontalAlignment.Left);
        listView1.Columns.Add("NAME", -2,HorizontalAlignment.Left);
        listView1.Columns.Add("MRP", -2,HorizontalAlignment.Left);
        listView1.Columns.Add("ORDERS", -2,HorizontalAlignment.Left);
        listView1.Columns.Add("PENDING", -2,HorizontalAlignment.Left);
    
        foreach (var item in items)
        {
            // Fill item
            ListViewItem item = new ListViewItem(item.Code);
            item.SubItems.Add(item.Name);
            item.SubItems.Add(item.MRP);
            item.SubItems.Add(item.OrdersCount);
            item.SubItems.Add(item.PendingCount);
    
            // Add to the ListView
            listView1.Items.Add(item);  
        }
    }