2010-11-02 27 views
6

tengo un control ListView sin columnas.Cómo agregar el encabezado de columna a un ListView en C#

una lista

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

Necesito crear columnas para cada elemento de la lista MyList en el ListView bien unos con otros en la columna para el número de serie.

Por ejemplo, si MyList contiene "A", "B" ,"C"

entonces la vista de lista será como

alt text

Sé que podemos hacerlo usando for o foreach bucle como

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

pero ¿hay alguna manera de hacer esto usando LINQ o LAMBDA Expression?

Respuesta

4
MyList.ForEach(name => listView1.Columns.Add(name)); 
+0

necesito agregar la columna "S.No" con esto. –

+3

No tiene que agregar S.No con Linq. Linq es solo un atajo para escribir bucles que hace que el código sea legible, nada más. Si es necesario, agregue S.No como el primer elemento de la lista usando InsertAt de la lista. – Aliostad

0

sólo para que sea un poco más claro lo Aliostad escribió y lo que los comentarios a continuación esta respuesta significa:

Así que actualmente tienen este código:

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

Como ya se ha mencionado puede escríbelo también con un foreach. Esto se vería así:

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

En el segundo ejemplo, también itera sobre la lista. Todo lo que hace oculta la variable de índice local i.

Con este tercer ejemplo que no se va a ocultar también esta iteración en una función que requiere una acción qué hacer con cada elemento de la lista:

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

Bajo el capó todavía itera sobre todos los elementos y realiza alguna funcionalidad en cada elemento. Simplemente no escribe el ciclo por su cuenta, pero eso no significa que sea de ninguna manera más rápido o mejor que su enfoque. Es solo otra forma (más corta) de decir lo que quiere lograr.

4

Aquí hay 4 opciones
hay por lo menos otros 10 maneras de hacer esto,

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); 

¿Ha considerado la opción KISS?

Cuestiones relacionadas