Источник данных DevExpress TreeList не обновляется в пользовательском интерфейсе

У меня есть TreeList, который находится внутри PopupContainerControl.

TreeList заполняется динамически в зависимости от контекста, в котором используется форма. Это означает, что список узлов обновляется и изменяется во время выполнения.

Проблема, с которой я столкнулся, состоит в том, что TreeList показывает только первую модификацию, внесенную в структуру узла, но не какую-либо следующую за ней.

Я использую класс Custom Node, который реализует IVirtualTreeListData. Показано ниже.

public class Node<T> : TreeList.IVirtualTreeListData
{
    public Node<T> Parent { get; set; }
    public List<Node<T>> Children { get; set; }
    public object[] Cells { get; set; }
    public T Object { get; set; }

    public Node(T t, Node<T> parent, object[] cells)
    {
        Parent = parent;
        Children = new List<Node<T>>();
        Cells = cells;
        Object = t;

        if (this.Parent != null)
            this.Parent.Children.Add(this);
    }

    public Node(Node<T> parent, object[] cells)
    {
        Parent = parent;
        Children = new List<Node<T>>();
        Cells = cells;

        if (this.Parent != null)
            this.Parent.Children.Add(this);
    }

    public void VirtualTreeGetChildNodes(VirtualTreeGetChildNodesInfo info)
    {
        info.Children = Children;
    }

    public void VirtualTreeGetCellValue(VirtualTreeGetCellValueInfo info)
    {
        info.CellData = Cells[info.Column.AbsoluteIndex];
    }

    public void VirtualTreeSetCellValue(VirtualTreeSetCellValueInfo info)
    {
        Cells[info.Column.AbsoluteIndex] = info.NewCellData;
    }
}

Поэтому, когда я впервые загружаю форму, я делаю следующий вызов.

_rootNode = new Node<MyResource>(null,null)
_treeList.DataSource = _rootNode;

Позже, когда ресурсы загружаются в TreeList, это выглядит следующим образом:

Node<MyResource> newResourceNode = new Node<MyResource>(_rootNode,new object[]{"New Node"});
treeList.DataSource = _rootNode;
treeList.RefreshDataSource();
treeList.ExpandAll();

Это установит ресурсы в TreeList только в ПЕРВЫЙ раз, когда к нему обращаются, но не будет отражать какие-либо последующие изменения.

1 ответ

После изменения источника данных древовидного списка вы можете попробовать:

      treelist.EndUpdate();

Вам также необходимо использовать «BeginUpdate()» и «EndUpdate()» одновременно, это повлияет на значение «TreeList.IsLockUpdate», если вы обнаружите, что «TreeList.IsLockUpdate» имеет значение «True», попытайтесь очистить "EndUpdate" во время работы.

Другие вопросы по тегам