2016-12-09 5 views
0

Windowsフォームでリストビューをいくつかのサンプルデータで埋めようとしています。私は、プロパティ、次のようなもののトランザクションのリストを持っている:文字列の2D配列をデータで埋めてListViewに追加する

 public float NetAmount { get; set; } 
     public DateTime TimeStamp { get; set; } 
     public string TransactionID { get; set; } 

これは、これまでのサンプルデータは、次のようにリストビューに置かれている方法です。

private void seedListView(List<Transactions> list) 
     { 
      List<string[]> _nesto = new List<string[]>(); 


      //Define 
      var data = new[] 
      { 

       new []{"Lollipop", "392", "0.2"}, 
       new []{"KitKat", "518", "26.0"}, 
       new []{"Ice cream sandwich", "237", "9.0"}, 
       new []{"Jelly Bean", "375", "0.0"}, 
       new []{"Honeycomb", "408", "3.2"} 
      }; 

      //Add 
      foreach (string[] version in data) 
      { 
       var item = new ListViewItem(version); 
       materialListView1.Items.Add(item); 
      } 
     } 

をデータでのデータソースとしてリストビューには、私は次のような出力が得られます。

Lollipop 392 0.2 
KitKat 518 26.2 
HoneyComb 408 3.2 

今、私は同じことをする必要がありますが、その代わりに、私は私が渡されたリストから項目を満たしたリストビューを持っているしたいのですがこのような関数へ:

15.2は純額である
15,2 2016-02-01 125215FESSEFOKP 

19.2 2016-02-01 125215FESSEFOKP 

13.6 2016-02-01 125215FESSEFOKP 

15.9 2016-02-01 125215FESSEFOKP 

、2016年2月1日にはタイムスタンプで、125215FESSEFOKPがTRANSACTIONIDです...

どのように私は動的にこれを行うことができますか?

編集:私はこのようにそれをやってきました:

List<string[][]> _nesto = new List<string[][]>(); 
    string[][] data = null; 
    foreach (var item in list) 
    { 
     data = new[] { new[] { item.NetAmount.ToString(), item.TimeStamp.ToString(), item.TransactionID.ToString() } }; 
     _nesto.Add(data); 
    } 
    ListViewItem it; 
    foreach (var item in _nesto) 
    { 
     foreach (string[] version in item) 
     { 
      it = new ListViewItem(version); 
      materialListView1.Items.Add(it); 
     } 
    } 

誰もがこの1よりもクリーンなソリューションを持っていますか?これは私がこのような単純なもののために書いた、あまりにも多くのコードを思わ:D

+0

代わりの文字列[]使用目的を使用して、それはそれを行う必要があります。 – Auguste

+0

どういう意味ですか? – User987

+0

下記の私の答えを参照してください。これを配列として作成することは、私の意見では設計上の選択肢が貧弱です。これはプログラミングにクラスがある理由です。それは "オブジェクト"を表し、それはまさにあなたがトランザクションでここでやっていることです。あなたのコードを管理し、それを配列として扱うよりずっと簡単に変更する – peterpep

答えて

1

私はここで私が言いたいのです。この

foreach (Transaction t in list) 
{ 
    var item = new ListViewItem(new string[]{ 
     t.NetAmount.ToString("N1"), 
     t.TimeStamp.ToString("d"), 
     t.TransactionID }); 
    materialListView1.Items.Add(item); 
} 
+0

私の方法のための過度のhahahahah!ありがとう! P.S.私がそこに書いた私の方法を見て、あなたのものははるかに優れている!! :)それは単に最高のものですので、受け入れられたur answe! – User987

+0

私はあなたがトランザクションクラスを持っていることを知っています。基本的には、クラス内のToStringをオーバーライドするだけで、それらの行のいくつかを削除することができます。 tToStringを実行してください(提示する書式が常に同じであることを前提とします) – peterpep

+0

はい、リストビューでは異なる列に異なるプロパティを追加します。あなたはToStringでそれを取得しません。注ListViewではなくListViewです。 –

1

は、私は、これはそれを行うための方法だと思います:

  1. トランザクションと呼ばれるクラスを作成します。プロパティnetamount、トランザクションID、タイムスタンプを持ちます。オーバーライドToStringメソッドを作成して、質問に応じてデータを出力するようにします。
  2. これらのトランザクションオブジェクトをすべて格納するリストがあります。
  3. listview.ItemsSourceをそのリストと同じに設定します。
  4. listview.items.refresh();

それに応じてリストビューが設定されます。リストからアイテムを追加したり削除したりすることができ、リストビューでデータが正しいことを確認するためにforeachステートメントを常に実行する必要がないので、これは(少なくとも私にとって)好ましい方法です。

+0

@ User987あなたの問題に対処している方法で簡単な問題を指摘したいだけです。トランザクションのリストを持たせ、ItemsSourceを介してlistViewにバインドしないことで、オブジェクトの操作をはるかに困難にします。たとえば、トランザクションクラスにメソッドを追加したり、トランザクションオブジェクトを処理する必要がある場合は、文字列配列として追加するので、使用しているリストビューから直接行うことはできません。 ItemsSourceを使用してToStringをオーバーライドすると、実際のトランザクションオブジェクトにアクセスして使用することができます。これが明確かどうかわからない – peterpep

+0

@ User987たとえば、リストビューから文字列[]を削除すると、そのリストはまだあなたのリストに残るでしょう。それはすぐに乱雑になるつもり – peterpep

1

のようにそれを行うだろう:[]

  object[] data = new object[] 
      { 
      new object []{15.2 , 2016-02-01, "125215FESSEFOKP"}, 
      new object []{19.2, 2016-02-01, "125215FESSEFOKP"}, 
      new object []{19.2, 2016-02-01, "125215FESSEFOKP"}, 
      new object []{19.2, 2016-02-01, "125215FESSEFOKP"} 
     }; 

    You won't be able to use anonymous type in this case. 
関連する問題