2014-01-12 125 views
1

我的要求是隱藏ListView中的特定行。由於沒有內置功能,因此我使用ListView_DrawItem事件來隱藏特定行。我能夠隱藏行,但問題是有一個balnk空間來了,如果我添加一個行的帖子到隱藏的行。ListView隱藏行

請找到下面的代碼:

ListViewItem LVI = listView1.Items.Add("1"); 
LVI.SubItems.Add("Srikanth"); 
ListViewItem LVI1 = listView1.Items.Add("2"); 
LVI1.SubItems.Add("Suresh"); 

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) 
{ 
    if (e.Item.Text != "2") 
    { 
     e.DrawDefault = true; 
    } 
} 

輸出類似於

1 SRIKANTH

3桑迪

想刪除空間B/W 1 & 3記錄

任何幫助表示讚賞

回答

0

你並沒有真正隱藏物品,這很明顯。相反,您提供自己繪製它們,並將其傳遞給默認渲染。項目在那裏無論如何。

我的方法是操作集合,只添加列表框需要處理的項目。

根據您手頭的數據,保留完整列表的本地副本(例如按照通用List<YourDataClass>的順序)。另外,保留一個'隱藏'索引列表。

尊重的List<T>順序和循環穿過它,只會增加新的ListViewItem對象,這些索引出現在「隱藏」列表。

private List<String[]> _listItems = new List<String[]>(); 
private List<Int32> _hiddenIndexes = new List<Int32>(); 

private void UpdateCollection() 
{ 
    listBox.Items.Clear(); 
    for (Int32 i = 0; i < _listItems.Count; i++) 
    { 
     if (!_hiddenIndexes.Contains(i)) 
      listBox.Items.Add(new ListBoxItem(_listItems[i])); 
    } 
} 

請注意,如果這是一個包含大量項目的列表,它可能不是最有效的方法。