private void InitV2(object serializedSet) { #if DEBUG var sw = new System.Diagnostics.Stopwatch(); sw.Start(); #endif FreeHierarchySelectedInfo selectedInfo = null; try { selectedInfo = ProtoHelper.ProtoDeserializeFromString <FreeHierarchySelectedInfo>(serializedSet as string); } catch (Exception ex) { ex.ShowMessage(); } if (selectedInfo == null || selectedInfo.Items == null || !selectedInfo.Items.Any()) { return; } #if DEBUG sw.Stop(); Console.WriteLine("InitV2, ProtoDeserializeFromString {0} млс", sw.ElapsedMilliseconds); sw.Restart(); #endif //Пока просто выделяем выбранные ObjectsFromSQL = XamTreeFinder.BuildPathFromSQL(selectedInfo .Items .Take(limit) .Where(s => s.Id != null && s.IsSelect.GetValueOrDefault()) .Select(s => s.Id).ToList(), _tree.Tree_ID); #if DEBUG sw.Stop(); Console.WriteLine("InitV2, BuildPathFromSQL {0} млс", sw.ElapsedMilliseconds); #endif }
private void FoundedGridOnSelectedItemsChanged(object sender, SelectedItemsChangedEventArgs e) { var xamGrid = sender as DataPresenterBase; if (xamGrid == null) { return; } IDHierarchy selItem = null; if (xamGrid.SelectedItems.Records.Count > 0) { var record = xamGrid.SelectedItems.Records[0] as DataRecord; if (record == null) { return; } selItem = record.DataItem as IDHierarchy; } else if (xamGrid.SelectedItems.Cells.Count > 0) { var cell = xamGrid.SelectedItems.Cells[0] as Cell; if (cell == null || cell.Record == null) { return; } selItem = cell.Record.DataItem as IDHierarchy; } if (selItem == null) { return; } var path = selItem.Path; if (path == null) { //Строим путь к дереву var pathes = XamTreeFinder.BuildPathFromSQL(new List <ID_TypeHierarchy> { new ID_TypeHierarchy { ID = selItem.ID, StringId = selItem.StringId, FreeHierItemId = selItem.FreeHierItemId, TypeHierarchy = selItem.TypeHierarchy, } }, _descriptor.Tree_ID); if (pathes != null && pathes.Count > 0) { path = pathes.First().Value.First(); } } if (path == null || path.Count == 0) { return; } //разворачиваем первый попавшийся //Разворачиваем ветку _parent.ExpandFromSQL(_parent.tree.Nodes, new ConcurrentStack <ID_TypeHierarchy>(path), true); }
private void FillPathes(List <IDHierarchy> ids, CancellationToken token) { if (ids == null) { return; } //Для тех, у кого пути не вернулись при поиске var idsWithoutPath = new List <IDHierarchy>(); foreach (var id in ids) { if (string.IsNullOrEmpty(id.ToRootPath)) { idsWithoutPath.Add(id); } } Task.Factory.StartNew(() => { //Строим путь к дереву var pathes = XamTreeFinder.BuildPathFromSQL(idsWithoutPath.Select(selItem => new ID_TypeHierarchy { ID = selItem.ID, StringId = selItem.StringId, FreeHierItemId = selItem.FreeHierItemId, TypeHierarchy = selItem.TypeHierarchy, }).ToList(), _descriptor.Tree_ID); if (pathes != null && pathes.Count > 0) { return(pathes.ToDictionary(k => { var fp = k.Value.FirstOrDefault(); //if (fp == null) return string.Empty; var ffp = fp.FirstOrDefault() as IDHierarchy; //if (ffp == null) return string.Empty; return ffp; }, v => v.Value, new IDHierarchyComparer())); } return(null); }).ContinueWith(t => { if (t.Result == null || t.Result.Count == 0) { return; } //Отмена поиска if (token.IsCancellationRequested) { return; } var pathes = t.Result; Dispatcher.BeginInvoke((Action)(() => { foreach (var id in idsWithoutPath) { List <List <ID_TypeHierarchy> > path; if (!pathes.TryGetValue(id, out path) || path == null) { continue; } id.Path = path.First(); var sb = new StringBuilder(); for (int i = path.Count - 1; i >= 1; i--) { var p = path[i]; if (p == null) { continue; } sb.Append(p.ToString()).Append("\\"); } id.ToRootPath = sb.ToString(); } }), DispatcherPriority.Background); }); }