Как добавить заголовок столбца в ListView в C # - PullRequest
7 голосов
/ 02 ноября 2010

У меня есть элемент управления ListView без столбцов.

список

List<String> MyList=new List<string>();

мне нужно создать столбцы для каждого элемента списка MyList в ListView вместе со столбцом для серийного номера.

Например, если MyList содержит "A", "B" ,"C"

тогда представление списка будет похоже на

alt text

Я знаю, что мы можем сделать это, используя цикл for или foreach, например

listView1.Columns.Add("S.No")
for(int i=0;i<MyList.Count;i++)
   {
      listView1.Columns.Add(MyList[i])
   }

но есть ли способ сделать это, используя LINQ или LAMBDA Expression?

Ответы [ 3 ]

5 голосов
/ 02 ноября 2010
MyList.ForEach(name => listView1.Columns.Add(name));
4 голосов
/ 02 ноября 2010

Здесь есть 4 варианта
есть еще как минимум 10 способов сделать это,

var myList = new List<string>() { "A", "B", "C" };

// 1: Modify original list and use List<>.ForEach()
myList.Insert(0, "S. No");
myList.ForEach(x => lisView.Columns.Add(x));

// 2: Add first column and use List<>.ForEach()
listView.Columns.Add("S. No");
myList.ForEach(x => listView.Columns.Add(x));

// 3: Don't modify original list
(new[] { "S. No" }).Concat(myList).ToList()
    .ForEach(x => listView.Columns.Add(x));

// 4: Create ColumnHeader[] with Linq and use ListView.Columns.AddRange()
var columns = (new[] { "S. No"}).Concat(myList)
    .Select(x => new ColumnHeader { Text = x }).ToArray();
listView.Columns.AddRange(columns);

Рассматривали ли вы вариант KISS ?

0 голосов
/ 02 ноября 2010

Просто чтобы было немного яснее, что написал Алиостад и что означают комментарии под этим ответом:

Итак, у вас есть этот код:

listView1.Columns.Add("S.No")
for(int i=0;i<MyList.Count;i++)
{
    listView1.Columns.Add(MyList[i])
}

Как вы уже упоминали, вы можете написать это также с foreach. Это будет выглядеть так:

listView1.Columns.Add("S.No")
foreach(var item in MyList)
{
    listView1.Columns.Add(item)
}

Во втором примере он также перебирает список. Все, что он делает, это скрывает локальную переменную индекса i.

В этом третьем примере вы не собираетесь скрывать и эту итерацию в функции, которая нуждается в действии, которое нужно делать с каждым элементом в списке:

listView1.Columns.Add("S.No")
MyList.ForEach(name => listView1.Columns.Add(name));

Под капотом он все еще перебирает все элементы и выполняет некоторую функциональность для каждого элемента. Вы просто не пишете цикл самостоятельно, но это не значит, что он в любом случае быстрее или лучше, чем ваш подход. Это просто еще один (более короткий) способ сказать, чего вы хотите достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...