2011-10-18 125 views
6

¿Cómo puedo ocultar una columna en un control ListView, sin establecer la propiedad de la columna Width en 0?¿Cómo ocultar una columna en un control ListView?

Además, ¿puedo bloquear el Width de una columna?

+0

Listview no es una grilla, tiene funciones limitadas. Supongo que puede evitar el cambio de tamaño de columna o arrastrar una gota, pero no puede ocultar y mostrar una columna, excepto cambiar su Ancho, si la elimina y vuelve a agregarla podría funcionar o no, pero depende de su lógica. –

+0

ListView no tiene columnas de forma predeterminada. ¿Está agregando columnas al 'ItemTemplate'? –

Respuesta

4

No es muy claro lo que importa aquí C++Cli etiqueta, pero:

Presumo que si estamos hablando de una columnas en ListView, estás en la vista de detalles del control. No existe una columna oculta Ocultar/Mostrar en ListView, por mucho que sepa, por lo que una de las soluciones puede ser simplemente eliminar esa columna de la interfaz de usuario.

hacerlo en forma más suave posible, simplemente llame a su código de regeneración ListView columna en el medio

listView.SuspendLayout(true); 

/*Manipulate column here*/ 

listView.ResumeLayout(); 

Los datos que es visible en ListView siempre permanece "en sus manos", por lo que en el momento en que se decida para mostrar la columna nuevamente, solo muestre la columna y complete ListView.

Espero que esto ayude.

2

cómo ocultar/mostrar columnas de vista de lista

C#, .NET framework 3.5.

Es fácil ocultar y mostrar columnas de vista de lista, si utiliza la vista de lista en "modo virtual". En "modo virtual", usted es responsable de completar los elementos de la lista con los datos. Esto hace posible poner los datos correctos en la columna correcta.

Déjenme demostrar: Cree un formulario, y agregue un control de vista de lista y un control de botón. Agregue 3 columnas al control de vista de lista. Establezca la propiedad "ver" del control listview en "Detalles". Establezca la propiedad "VirtualMode" del control listview en "True". Establezca la propiedad "VirtualListSize" del control listview en "100". Añadir un bool a la forma:

private bool mblnShow = true; 

añadir el evento “RetrieveVirtualItem” para el control de vista de lista y añada el siguiente código:

ListViewItem objListViewItem = new ListViewItem(); 
objListViewItem.Text = "Item index: " + e.ItemIndex.ToString(); 
if (mblnShow) objListViewItem.SubItems.Add("second column: " +  DateTime.Now.Millisecond.ToString()); 
objListViewItem.SubItems.Add("third column: " + DateTime.Now.Millisecond.ToString()); 
e.Item = objListViewItem; 

Añadir el evento “click” para el control de botón, y agregue el código siguiente:

mblnShow = !mblnShow; 
if (mblnShow && !this.listView1.Columns.Contains(this.columnHeader2)) this.listView1.Columns.Insert(1, this.columnHeader2); 
else if (!mblnShow && this.listView1.Columns.Contains(this.columnHeader2)) 
    this.listView1.Columns.Remove(this.columnHeader2); 

Ejecute la aplicación y presione el botón para mostrar y ocultar la segunda columna.

Tenga en cuenta que ejecutar una vista de lista en modo virtual generará un error si coloca datos en la colección de elementos. Hay mucho más sobre el modo virtual, así que sugiero leer sobre él antes de usarlo.

4

Basta simplemente quitar la columna en el índice que desea:

listView1.Columns.RemoveAt(3); 

cuando lo desee volver ingresando con su nombre:

listView1.Columns.Insert(3, "Column Name"); 

Se realizará una copia con sus valores.

+1

¿Esto presumiblemente cambiará los índices de subíndices de otras columnas? –

2

Si necesita los datos asociados con una fila sin mostrarlo utilizar Tag propiedad del ListView

+1

-1 'Tag' es un poco abominable, hay mucho que puedes hacer con él. Una forma mucho mejor es simplemente heredar de la clase ListViewItem y agregar sus propias propiedades/campos como miembro real. De esta manera, tienes una arquitectura limpia, explícita y extensible. –

+2

Dependiendo de lo que quiera hacer, la etiqueta está bien. – Nick

6

La forma más sencilla de la siguiente manera, probar este segmento de código:

ocultar:

 LVW.Columns.Item(0).Width = 0 

volver a mostrar :

 LVW.Columns.Item(0).AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent) 

puede ayudar a alguien.

+0

funcionó perfectamente para mí. – Sipo

0

vaya a Editar Columnas (en Propiedades de vista de lista en modo de diseño), en Varios establecer el ancho a CERO

+0

"sin establecer la propiedad Ancho de columna en 0". –

0

Si usted tiene sólo una columna, una segunda columna vacía aparece para llenar el espacio extra a la derecha. Para ocultar esta columna vacía, implemente el evento resize listview. Ahí haz lo siguiente.

m_lstItems.Columns[0].Width = m_lstItems.Width - 5; 

Esto effecitvely ocultar la columna extra vacío y en lugar de tener la primera columna ocupa todo el espacio en la vista de lista.

Cuestiones relacionadas