ListView Hidding行

时间:2014-01-12 22:52:32

标签: c# .net winforms listview

我的要求是隐藏ListView中的特定行。由于没有内置功能,我使用ListView_DrawItem事件来隐藏特定行。我能够隐藏行,但问题是如果我向隐藏行添加行帖,会有一个balnk空间。

请找到以下代码:

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&amp; 3记录

感谢任何帮助

1 个答案:

答案 0 :(得分: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]));
    }
}

请注意,如果这恰好是包含大量项目的列表,则可能不是最有效的方法。