2011-10-18 107 views
6

如何隱藏ListView控件中的列,而不將列Width屬性設置爲0如何隱藏ListView控件中的列?

此外,我可以鎖定列的Width

+0

Listview不是網格,功能有限。我想你可以防止列調整大小或拖動,但你不能隱藏和顯示列,除非改變寬度,如果你刪除它,然後重新添加它可以工作與否,但取決於你的邏輯。 –

+0

默認情況下,ListView沒有列。你是否將列添加到'ItemTemplate'? –

回答

4

不是很清楚這裏的問題C++Cli標籤,但:

我相信,如果你在ListView談論列,你在詳細信息視圖控件。在我看來,ListView沒有內置隱藏/顯示列的方式,所以其中一個解決方案可以刪除該列表單UI。

要做到這一點的最光滑的方式可能只是叫你ListView列再生代碼

之間
listView.SuspendLayout(true); 

/*Manipulate column here*/ 

listView.ResumeLayout(); 

的數據是在ListView可見始終保持「你的手」,所以此刻的你將決定再次顯示該列,只需顯示該列並再次填寫ListView即可。

希望這會有所幫助。

2

如何隱藏/顯示列表視圖的列

C#.NET框架3.5。

如果您在「虛擬模式」下使用listview,隱藏並顯示listview列很容易。在「虛擬模式」中,您有責任使用數據填充listview項目。這可以將正確的數據放在正確的列中。

讓我演示: 創建一個表單,並添加一個listview控件和一個按鈕控件。 將3列添加到列表視圖控件。 將listview控件的「view」屬性設置爲「Details」。 將listview控件的「VirtualMode」屬性設置爲「True」。 將listview控件的「VirtualListSize」屬性設置爲「100」。 添加一個bool到窗體:

private bool mblnShow = true; 

添加事件「RetrieveVirtualItem」 ListView控件,並添加以下代碼:

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; 

添加「點擊」事件爲按鈕控制,並添加以下代碼:

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

運行該應用程序,然後按按鈕顯示並隱藏第二列。

請注意,如果您將數據放入項目集合中,則在虛擬模式下運行listview會引發錯誤。關於虛擬模式的知識還有很多,所以我建議在使用它之前先閱讀一下。

4

只是簡單地想要的索引中刪除列:

listView1.Columns.RemoveAt(3); 

當你想回來只是它的名稱插入:

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

它將與它的值返回。

+1

這可能會改變其他列的子項索引? –

2

如果需要關聯的數據與行不顯示它使用ListView的Tag財產

+1

-1'標籤'是有點憎惡,只有這麼多你可以用它做。更好的方法是簡單地從ListViewItem類繼承,並將您自己的屬性/字段添加爲真正的成員。這樣你就有了一個很好的清晰,可擴展的架構。 –

+2

取決於你想做什麼標籤是好的。 – Nick

6

如下最簡單的方法,試試這個代碼段:

隱藏:

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

再次顯示:

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

這可以幫助某人。

+0

爲我完美工作。 – Sipo

0

去編輯欄(在設計模式中的ListView屬性),下雜項設置寬度爲零

+0

「而不將列寬度屬性設置爲0」。 –

0

如果你只有一個欄,第二空欄顯示,以填補額外的空間的權利。要隱藏這個空列,請實現listview resize事件。在那裏做下面的事情。

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

這將有效地隱藏多餘的空列,而是讓第一列佔用列表視圖中的所有空間。