2012-07-03 45 views
11

Estoy aprendiendo a usar el listView en un windowsForm y tengo algunos problemas que espero resolver aquí. Lo primero es cuando estoy creando las columnas con el código de abajo:Crear columnas en ListView y agregar elementos

private void initListView() 
    { 
     // Add columns 
     lvRegAnimals.Columns.Add("Id", -3,HorizontalAlignment.Left); 
     lvRegAnimals.Columns.Add("Name", -3, HorizontalAlignment.Left); 
     lvRegAnimals.Columns.Add("Age", -3, HorizontalAlignment.Left); 
    } 

Cuando ejecuto el programa, el nombre de las columnas no son visibles, están todos en la esquina izquierda , y tengo que "arrastrarlos" para poder leer el texto. ¿Qué he hecho mal?

Y finalmente me pregunto cómo agrego elementos a las columnas. ¿Primero creo un objeto como

ListViewItem item1 = new ListViewItem(???); 
item1.SubItems.Add("text"); 

¿Cada elemento listViewItem una columna o una fila? ¿Cómo agrego filas de información? ¡Preciate algo de ayuda! ¡Gracias!

Respuesta

31

Su primer problema es que está pasando -3 al segundo parámetro de Columns.Add. Necesita ser -2 para que auto-dimensione la columna. Fuente: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columns.aspx (vistazo a los comentarios en el ejemplo de código en la parte inferior)

private void initListView() 
{ 
    // Add columns 
    lvRegAnimals.Columns.Add("Id", -2,HorizontalAlignment.Left); 
    lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left); 
    lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left); 
} 

También puede utilizar la otra sobrecarga, Añadir (cadena). Por ejemplo:

lvRegAnimals.Columns.Add("Id"); 
lvRegAnimals.Columns.Add("Name"); 
lvRegAnimals.Columns.Add("Age"); 

de referencia para más sobrecargas: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columnheadercollection.aspx

En segundo lugar, para añadir elementos a ListView, es necesario crear instancias de ListViewItem y añadirlas a la colección de artículos de la vista de lista. Necesitarás usar el constructor string [].

var item1 = new ListViewItem(new[] {"id123", "Tom", "24"}); 
var item2 = new ListViewItem(new[] {person.Id, person.Name, person.Age}); 
lvRegAnimals.Items.Add(item1); 
lvRegAnimals.Items.Add(item2); 

También puede almacenar objetos en la propiedad Etiqueta del elemento.

item2.Tag = person; 

Y entonces se puede extraer que

var person = item2.Tag as Person; 

Déjeme saber si usted tiene alguna pregunta y espero que esto ayude!

+0

¡Gracias por la ayuda! Voy a probar este código más tarde o mañana. Quizás pueda volver contigo si tengo algunas preguntas al respecto. –

+0

no tiene ningún constructor de sobrecarga para una matriz de cadenas implícitamente tipada? – Charlie

+1

@Charlie, ¿estoy asumiendo que se refiere a los constructores de sobrecarga de ListViewItem? Si desea crear un ListViewItem con SubItems desde el constructor, puede usar la sobrecarga de cadena [] o la sobrecarga de ListViewSubItem []. Estoy usando new [] en vez de nueva cadena [] porque C# puede inferir automáticamente el tipo (que es una cadena en este caso). Consulte https://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.listviewitem(v=vs.110).aspx – Tom

24

No vi a nadie responder esto correctamente. Así que lo estoy publicando aquí. Para que aparezcan las columnas, debes especificar la siguiente línea.

lvRegAnimals.View = View.Details; 

Y a continuación, agregue sus columnas después de eso.

lvRegAnimals.Columns.Add("Id", -2, HorizontalAlignment.Left); 
lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left); 
lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left); 

Espero que esto ayude a cualquier persona que busque esta respuesta en el futuro.

+3

Esta debería ser la respuesta correcta – lzt

3

Tiene que establecer propiedades para el control:

listView1.View = View.Details; 
+0

qué hace esta propiedad>/ –

+0

* qué hace esta propiedad * - ListViews se usan en el estándar "Explorador de Windows", así que imagina ** Vista Detalles ** en el buscador estándar de carpetas/archivos . –

+0

Mostrará la estructura de la grilla. Pls. Pruébalo por ti mismo. –

0
  listView1.View = View.Details; 
     listView1.Columns.Add("Target No.", 83, HorizontalAlignment.Center); 
     listView1.Columns.Add(" Range ", 100, HorizontalAlignment.Center); 
     listView1.Columns.Add(" Azimuth ", 100, HorizontalAlignment.Center);  

También tuve el mismo problema .. i arrastrar la columna a la izquierda .. pero ahora bien .. Así que digamos que tengo 283 * 196 tamaño de la vista de lista ..... Declaramos en el ancho de la columna -2 para el ancho automático. Para encajar en la vista de lista, podemos dividir el ancho de la vista de lista en 3 partes (83,100,100) ...

+0

No solo publiques el código, debes agregar una explicación. – reformed

Cuestiones relacionadas