Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ListView隐藏行_C#_.net_Winforms_Listview - Fatal编程技术网

C# ListView隐藏行

C# ListView隐藏行,c#,.net,winforms,listview,C#,.net,Winforms,Listview,我的要求是在列表视图中隐藏特定行。由于没有内置功能,我使用了ListView\u DrawItem事件来隐藏特定的行。我可以隐藏行,但问题是,如果我在隐藏行中添加一行帖子,将出现一个无效空间 请查找以下代码: ListViewItem LVI = listView1.Items.Add("1"); LVI.SubItems.Add("Srikanth"); ListViewItem LVI1 = listView1.Items.Add("2"); LVI1.SubItems.Add("Sures

我的要求是在
列表视图中隐藏特定行。由于没有内置功能,我使用了
ListView\u DrawItem
事件来隐藏特定的行。我可以隐藏行,但问题是,如果我在隐藏行中添加一行帖子,将出现一个无效空间

请查找以下代码:

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斯里坎

3桑迪

是否要删除空格b/w 1和3记录


感谢您提供的任何帮助

您并没有真正隐藏这些项目,这是显而易见的。相反,您可以自己绘制它们,并将其中一些传递给默认渲染。不管怎样,物品都在那里

我的方法是操纵集合,只添加列表框需要处理的项目

根据手头的数据,按顺序保存完整列表的本地副本,例如在通用
列表中。另外,保留一个“隐藏”索引列表

尊重
列表的顺序
并在其上循环,仅为“隐藏”列表中不存在的索引添加新的
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]));
    }
}
private List\u listItems=new List();
私有列表_hiddenIndexes=新列表();
私有void UpdateCollection()
{
listBox.Items.Clear();
对于(Int32 i=0;i<\u listItems.Count;i++)
{
如果(!\u hiddenIndexes.Contains(i))
添加(新的ListBoxItem(_listItems[i]);
}
}
请注意,如果这是一个包含大量项目的列表,那么它可能不是最有效的方法