0

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

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

我该怎么做?

4

3 回答 3

0

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

listview.Columns.Add()
于 2013-05-23T15:39:20.980 回答
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

于 2013-05-23T15:45:18.943 回答
0

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

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

然后很自然地会想到,您有一组具有这 3 个字段的项目,并且每个项目代码都有各自的名称和订单数。

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

让我们看看你的代码:

  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);  
    }
}
于 2013-05-23T15:47:02.627 回答