C # listView, ¿cómo agrego elementos a las columnas 2, 3 y 4, etc.?

106

Para agregar elementos a la columna 1 en mi listViewcontrol ( Winform) que estoy usando listView1.Items.Add, esto funciona bien, pero ¿cómo agrego elementos a las columnas 2 y 3, etc.?

Kiquenet
fuente
8
+1: Buena pregunta. esta parte del control ListView es muy confusa y poco intuitiva. A veces realmente creo que odian a los desarrolladores @ MS
Mehdi LAMRANI
1
@Mika: No es fácil abstraer del usuario la complejidad del diseño robusto de la GUI.
Christopher Berman
1
(Eso sonó mucho menos condescendiente en mi cabeza; ¡lo siento!)
Christopher Berman
Añadir a subiiems
Ramankingdom

Respuestas:

134

Hay varias formas de hacerlo, pero aquí hay una solución (para 4 columnas).

string[] row1 = { "s1", "s2", "s3" };
listView1.Items.Add("Column1Text").SubItems.AddRange(row1);

Y una forma más detallada está aquí:

ListViewItem item1 = new ListViewItem("Something");
item1.SubItems.Add("SubItem1a");
item1.SubItems.Add("SubItem1b");
item1.SubItems.Add("SubItem1c");

ListViewItem item2 = new ListViewItem("Something2");
item2.SubItems.Add("SubItem2a");
item2.SubItems.Add("SubItem2b");
item2.SubItems.Add("SubItem2c");

ListViewItem item3 = new ListViewItem("Something3");
item3.SubItems.Add("SubItem3a");
item3.SubItems.Add("SubItem3b");
item3.SubItems.Add("SubItem3c");

ListView1.Items.AddRange(new ListViewItem[] {item1,item2,item3});
Inisheer
fuente
65

Puede agregar elementos / subelementos a ListView como:

ListViewItem item = new ListViewItem(new []{"1","2","3","4"});
listView1.Items.Add(item);

Pero sospecho que su problema está en el tipo de vista . Configúrelo en el diseñador en Detalles o haga lo siguiente en el código:

listView1.View = View.Details;
bruno conde
fuente
2
También es muy importante utilizar "listView1.FullRowSelect = true" ... de lo contrario, solo se puede hacer clic en la columna 1. ¡Ojalá hubiera sabido esto antes! me hubiera ahorrado un montón de trabajo.
John Henckel
¡Especialmente el comentario sobre listView1.View me ayudó! Thnx!
Dev.Jaap
7
 private void MainTimesheetForm_Load(object sender, EventArgs e)
        {
            ListViewItem newList = new ListViewItem("1");
            newList.SubItems.Add("2");
            newList.SubItems.Add(DateTime.Now.ToLongTimeString());
            newList.SubItems.Add("3");
            newList.SubItems.Add("4");
            newList.SubItems.Add("5");
            newList.SubItems.Add("6");
            listViewTimeSheet.Items.Add(newList);

        }
ken4ward
fuente
7

Aquí está la documentación de msdn sobre el objeto listview y el objeto listviewItem.
http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.aspx

Le recomiendo encarecidamente que al menos se tome el tiempo para leer la documentación sobre cualquier objeto que use del marco .net. Si bien la documentación puede ser bastante pobre en algunos momentos, sigue siendo invaluable, especialmente cuando se encuentra en situaciones como esta.

Pero como dijo James Atkinson, es simplemente una cuestión de agregar subelementos a un elemento de vista de lista así:

ListViewItem i = new ListViewItem("column1");
i.SubItems.Add("column2");
i.SubItems.Add("column3");
CalvinR
fuente
4

Para su problema, use así:

ListViewItem row = new ListViewItem(); 
row.SubItems.Add(value.ToString()); 
listview1.Items.Add(row);
OneM
fuente
0

Una línea que hice y funciona:

listView1.Items.Add(new ListViewItem { ImageIndex = 0, Text = randomArray["maintext"], SubItems = { randomArray["columntext2"], randomArray["columntext3"] } });
David Rodrigues
fuente
-2

Utilice ListViewSubItem - Consulte: MSDN

Jan Bannister
fuente