【问题标题】:ListView Hidding rowsListView 隐藏行
【发布时间】:2014-01-12 22:52:32
【问题描述】:

我的要求是隐藏ListView 中的特定行。由于没有内置功能,我使用 ListView_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 记录

感谢任何帮助

【问题讨论】:

    标签: c# .net winforms listview


    【解决方案1】:

    您并没有真正隐藏这些项目,这是显而易见的。相反,您提供自己绘制它们,并将一些传递给默认渲染。无论如何,这些项目都在那里。

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

    根据您手头的数据,按顺序保留完整列表的本地副本,例如在通用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]));
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 2012-12-08
      • 2012-11-18
      • 2016-03-29
      • 2011-02-07
      相关资源
      最近更新 更多