Источник данных 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" во время работы.