Как добавить заголовок столбца в ListView в C#
у меня есть элемент управления ListView без столбцов.
в список
List<String> MyList=new List<string>();
мне нужно создать столбцы для каждого списка MyList
элемент ListView
вместе с одним другим столбцом для серийного номера.
например, если MyList
содержит "A", "B" ,"C"
потом в списке будет как
Я знаю, что мы можем сделать это с помощью for
или foreach
цикл вроде
listView1.Columns.Add("S.No")
for(int i=0;i<MyList.Count;i++)
{
listView1.Columns.Add(MyList[i])
}
но есть ли способ сделать это с помощью LINQ
или LAMBDA Expression
?
3 ответов
вот 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);
вы рассматривали поцелуй?
просто чтобы было немного яснее, что написал Aliostad и что означают комментарии ниже этого ответа:
так, в настоящее время у вас есть этот код:
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));
под капотом он по-прежнему повторяет все элементы и выполняет некоторые функции для каждого элемента. Вы просто не пишете цикл самостоятельно, но это не означает, что он в любом случае быстрее или лучше, чем ваш подход. Это просто еще один (более короткий) способ сказать, чего вы хотите достичь.