Я рецензировал эту статью Проблема загрузки TreeView , но это не решает мою проблему. У меня есть такая структура: Персона - Посещение
Посещение является иерархическим, поэтому я могу иметь:
Person
- Visit 1
- Visit 2
- Visit 2.1
- Visit 2.2
, и нет способа определить, какая это структура.
I Я определил 2 класса Person и посещение и используя EFCore. Я сопоставил базу данных.
Код загрузки Person:
var aList = await context.VVisitHierarchy
.Where(a => a.CodPaz == _PazV.CodPaz && a.Parent == null)
.OrderBy(b => b.CreationOrd).ThenBy(b => b.Data).ThenBy(b => b.CodPar)
.ToListAsync();
foreach (var item in aList)
{
MTreeViewVisit aMVisit = new MTreeViewVisit(item);
Visits.Add(aMVisit);
await aMVisit.LoadDataAsync();
}
, а затем я загружаю все посещения:
public async Task LoadDataAsync()
{
using (var context = new TitoDocContext())
{
var aList = await context.VVisitHierarchy
.Where(a => a.CodPaz == _VisitH.CodPaz && a.Parent == _VisitH.CodPar)
.OrderBy(b => b.CreationOrd).ThenBy(b => b.Data).ThenBy(b => b.CodPar)
.ToListAsync();
foreach (var item in aList)
{
MTreeViewVisit aMVisit = new MTreeViewVisit(item);
Visits.Add(aMVisit);
await aMVisit.LoadDataAsync();
}
}
}
Что прекрасно, так это то, что я вижу, что дерево загружается постепенно, это очень хорошо. Что НЕ приятно, так это то, что когда у меня есть несколько уровней, когда я пытаюсь развернуть уровень ниже, я получаю неперехваченную ошибку, поскольку элементы не были загружены (или это мое предположение). Я предположил, что это так, потому что для небольшого набора данных он всегда работает идеально, но когда у меня 1000 клиентов и 10 000 посещений, он случайно заходит в тупик. загружен "но как определить, загружен ли весь асин c? Также мне нужно, чтобы элементы root были в правильном порядке (из запроса), а не в «скорости создания», так что я могу сделать? Может быть, я могу создать элемент root без дочернего элемента, а затем добавить дочерний элемент после загрузки всей структуры? но опять как все ждать и потом сигнализировать об обновлении?