用数据填充二维字符串数组,然后将其添加到ListView

时间:2016-12-09 18:14:36

标签: c# arrays string winforms listview

我正在尝试使用一些示例数据填充Windows窗体中的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);
            }
        }

使用数据作为listview的数据源,我得到以下输出:

Lollipop  392 0.2
KitKat    518 26.2
HoneyComb 408 3.2

现在我需要做同样的事情,但是我想让listview填充列表中我传递给函数的项目,如下所示:

15,2 2016-02-01 125215FESSEFOKP

19.2 2016-02-01 125215FESSEFOKP

13.6 2016-02-01 125215FESSEFOKP

15.9 2016-02-01 125215FESSEFOKP

如果15.2是净额,2016-02-01是时间戳,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);
        }
    }

有没有人有比这更清洁的解决方案?这似乎是我为这样一个简单的事情编写的太多代码:D

3 个答案:

答案 0 :(得分:1)

我认为这是做到这一点的方法:

  1. 创建一个名为transaction的类。它将具有属性netamount,事务ID,时间戳。创建一个覆盖ToString方法,以便它按您想要的方式输出数据(根据您的问题)。
  2. 有一个列出所有这些交易对象的清单。
  3. 您将listview.ItemsSource设置为等于该列表。
  4. listview.items.refresh();
  5. 它应该相应地填充你的列表视图。这是首选方式(至少对我而言),因为您只需添加和删除列表中的项目,您就不需要经常运行foreach语句来确保列表视图中的数据正确。

答案 1 :(得分: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);
}

答案 2 :(得分: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.