【问题标题】: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]));
}
}
请注意,如果这恰好是一个包含大量项目的列表,它可能不是最有效的方法。