2014-01-12 2 views
1

Мое требование - скрыть определенные строки в ListView. Поскольку нет встроенных функций, я использовал событие ListView_DrawItem, чтобы скрыть определенные строки. Мне удалось скрыть строки, но проблема в том, что есть балкс-пространство, если я добавлю строку в скрытую строку.ListView Hidding rows

Пожалуйста, найдите следующий код:

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 Sandy

бы хотели убрать пространство ч/б, 1 & 3 записи

Любая помощь приветствуется

ответ

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])); 
    } 
} 

Опасайтесь, что если это список, состоящий из очень большого количества предметов, это может быть не самый эффективный подход.

Смежные вопросы