2011-10-18 20 views
6

Come nascondere una colonna in un controllo ListView, senza impostare la proprietà Width della colonna su 0?Come nascondere una colonna in un controllo ListView?

Inoltre, posso bloccare il Width di una colonna?

+0

Listview non è una griglia, ha funzionalità limitate. Immagino che tu possa impedire il ridimensionamento o il dragdrop della colonna ma non puoi nascondere e mostrare una colonna tranne cambiarne la larghezza, se la rimuovi e la ri-aggiungi in seguito potrebbe funzionare o meno ma dipende dalla tua logica. –

+0

Il ListView non ha colonne per impostazione predefinita. Stai aggiungendo colonne al 'ItemTemplate'? –

risposta

4

non molto chiaro ciò che conta qui C++Cli tag, ma:

Presumo che se si sta parlando di un colonne in ListView, sei in vista dettagli del controllo. Non c'è un modo di nascondere/mostrare la colonna incorporata in ListView, per quanto ne sappia, quindi una delle soluzioni può essere semplicemente rimuovere quell'interfaccia utente della colonna.

farlo in modo più agevole possibile, basta chiamare il codice di rigenerazione ListView colonna tra

listView.SuspendLayout(true); 

/*Manipulate column here*/ 

listView.ResumeLayout(); 

I dati che è visibile in ListView rimane sempre "nelle vostre mani", quindi al momento si deciderà per mostrare di nuovo la colonna, basta mostrare la colonna e riempire nuovamente ListView.

Spero che questo aiuti.

2

Come nascondere/mostrare ListView colonne

C#, .NET Framework 3.5.

È facile nascondere e mostrare le colonne listview, se si utilizza listview in "modalità virtuale". In "modalità virtuale", sei responsabile del riempimento della lista con i dati. Ciò rende possibile inserire i dati corretti nella colonna corretta.

Lasciami dimostrare: Creare un modulo e aggiungere un controllo listview e un pulsante di controllo. Aggiungi 3 colonne al controllo listview. Imposta la proprietà "vista" del controllo listview su "Dettagli". Impostare la proprietà "VirtualMode" del controllo listview su "True". Impostare la proprietà "VirtualListSize" del controllo listview su "100". Aggiungi un bool al form:

private bool mblnShow = true; 

aggiungere l'evento “RetrieveVirtualItem” per il controllo ListView, e aggiungere il seguente codice:

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; 

aggiungere l'evento “Clic” per il controllo Button, e aggiungi il seguente codice:

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

Eseguire l'applicazione e premere il pulsante per mostrare e nascondere la seconda colonna.

Si noti che l'esecuzione di un listview in modalità virtuale genera un errore se si inseriscono i dati nella raccolta di articoli. C'è molto di più sulla modalità virtuale, quindi suggerisco di leggerlo prima di usarlo.

4

semplicemente rimuovere colonna in corrispondenza dell'indice che si desidera:

listView1.Columns.RemoveAt(3); 

quando lo vuoi indietro solo inserirla con il suo nome:

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

Sarebbe tornato indietro con i suoi valori.

+1

Tuttavia, cambierà presumibilmente gli indici dei sotto-argomenti di altre colonne? –

2

Se avete bisogno di associare dati con una fila senza visualizzarlo utilizzare la proprietà del ListView Tag

+1

-1 "Tag" è un po 'abominevole, c'è solo così tanto che puoi farci. Un modo molto migliore è semplicemente ereditare dalla classe ListViewItem e aggiungere i propri campi/proprietà come membro reale. In questo modo hai una bella architettura pulita, esplicita ed estensibile. –

+2

A seconda di cosa si vuole fare, il Tag va bene. – Nick

6

Il modo più semplice come segue, provate questo segmento di codice:

nascondere:

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

mostrano ancora una volta :

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

questo può aiutare qualcuno.

+0

ha funzionato perfettamente per me. – Sipo

0

Vai a Modifica colonne (sotto le proprietà di ListView in modalità progettazione), sotto Varie impostare la larghezza a ZERO

+0

"senza impostare la proprietà Width della colonna su 0". –

0

Se si dispone di una sola colonna, una seconda colonna vuota mostra fino a riempire lo spazio in più per il diritto. Per nascondere questa colonna vuota, implementa l'evento di ridimensionamento listview. In là fai quanto segue.

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

Ciò effecitvely nascondere la colonna in più vuota e invece hanno la prima colonna occupano tutto lo spazio nel ListView.

Problemi correlati