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

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 に答える