2015-02-03 6 views
0

Я использую TreeListView (ObjectListView) и заселили ее с числом элементов из БД:Select (выделить) узел в TreeListView

class Data 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public List<Data> Child; 

    public Data(int id, string name) 
    { 
     ID = id; 
     Name = name; 
     Child = new List<Data>(); 
    } 
} 

Как я могу выбрать объект (узел), прокрутите дерево и расширить родительских узлов к нему (если необходимо)? Я попытался это:

var node = data.SelectMany(x => GetChildren(x)).Where(x => x.ID == 100).FirstOrDefault(); 
if (node != null) 
{     
    this.tlv.Select(); 
    this.tlv.SelectObject(node, true); 
    <???> 
} 

Для средних WinForms TreeView мой код выглядит следующим образом:

treeView1.SelectedNode = findNodes[j]; 
findNodes[j].EnsureVisible(); 
WinAPI.SendMessage(treeView1.Handle, WinAPI.WM_HSCROLL, (IntPtr)WinAPI.SB_LEFT, IntPtr.Zero); 
+0

попробовать это: http://stackoverflow.com/questions/10034714/c-sharp-winforms-highlight-treenode-when-treeview-doesnt -have-focus –

+0

'tlv.SelectObject' должно быть достаточно. TLV сравнивает объекты по ссылке. Является ли объект 'node' выбранным из' data' существующим в списке объектов TLV (с той же ссылкой)? Возможно, вы заполнили данные TLV из другого запроса базы данных. –

+0

Он работает, когда 'treeView1.ExpandAll()'. В этом случае я бы использовал 'SelectObject (node)' и 'EnsureModelVisible (node)'. Но когда дерево рухнуло, эти методы не работают, и 'treeListView1.GetParent (node)' возвращает значение null (Как мне получить всех родителей, а затем расширить их?) – egeo

ответ

2

ObjectListView имеет Reveal() метод, который делает именно это. Из документов:

Разверните всех предков данной модели и убедитесь, что они затем видны.

Так что ваш код должен быть просто:

this.tlv.Reveal(node, true); 
Смежные вопросы