我的要求是隐藏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记录
感谢任何帮助
答案 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]));
}
}
请注意,如果这恰好是包含大量项目的列表,则可能不是最有效的方法。