用列数据填充Listview

本文关键字:Listview 填充 数据 | 更新日期: 2023-09-27 18:15:15

嗨,我遵循了填充列表视图的答案,但是列表视图是水平填充的,而是我需要它以列的方式填充这是我的代码

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

我该怎么做?

用列数据填充Listview

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

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

那么很自然地认为,您有一组包含这3个字段的项目,每个项目代码都有各自的名称&orders-count .

现在,你的数据结构设计得完全不正确!这就是你有问题的原因!

让我们看看你的代码:

  1. 如果list_p_code.Length != list_p_name.Length怎么办?你期望你的listView如何显示这个?
  2. 您在实际添加列表项的同一周期中动态添加列。也就是说,每次迭代都会出现新的列。但是,如何在所有列初始化之前添加项呢?

具有正确数据结构的示例。注意,在开始遍历项之前,应该初始化所有列。

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

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

listview.Columns.Add()

来自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