public override void Dispose() { RootNode = null; ChangeDefectView = null; Content = null; BindingContext = null; }
protected override void OnAppearing() { base.OnAppearing(); // Если у нас RootNode ещё не строился, то вызываем buildTree в отдельном потоке, иначе просто строим список if (RootNode != null) { InitTreeDefect(); } else { var popupPage = new LoadingPopupPage("Идет построение дерева дефектов...", true); Navigation.PushPopupAsync(popupPage); Task.Factory.StartNew(() => { RootNode = BuildTree(); Device.BeginInvokeOnMainThread(() => { InitTreeDefect(); Navigation.PopPopupAsync(); }); }); } const string textStart = "Путь до текущей группы конструкций: "; // Путь в дереве дефектов // Если это родительская нода if (CurrentLevel?.ParentNode != null) { var nameBuilder = new StringBuilder(CurrentLevel.NGrConstr); var tempNode = CurrentLevel; // Пока не дошли до рутовой ноды while (tempNode.ParentNode != null) { tempNode = tempNode.ParentNode; // не записываем "Общие данные" if (tempNode.ParentNode != null) { // записываем в начало nameBuilder.Insert(0, $"{tempNode.NGrConstr}/"); } } TreeNodeLevelLabel.Text = $"{textStart}/{nameBuilder}"; } // Иначе мы убираем с экрана этот label else { TreeNodeLevelLabel.Text = $"{textStart}/"; //TreeNodeLevelLabel.IsVisible = false; } }
/// <summary> /// Конструктор /// </summary> /// <param name="cIsso"></param> /// <param name="rootNode"></param> /// <param name="currentLevel"></param> /// <param name="visibleMode"></param> public AddIssoDefectContentPageList(int cIsso, Ais7IssoDefectsTreeNode2 rootNode = null, Ais7IssoDefectsTreeNode currentLevel = null, Ais7IssoDefectsTreeNode.VisibleMode visibleMode = Ais7IssoDefectsTreeNode.VisibleMode.ExistConstructions) { InitializeComponent(); Title = $"ИССО №{cIsso}: Добавление дефекта."; CIsso = cIsso; CurrentLevel = currentLevel; RootNode = rootNode; VisibilityMode = visibleMode; ChangeDefectView.Icon = new FileImageSource { File = CommonStaffUtils.GetFilePath(visibleMode == Ais7IssoDefectsTreeNode.VisibleMode.AllContructions ? "elements_tree_full.png" : "elements_tree.png") }; }
/// <summary> /// Метод, инициализирующий построение списка конструктивов и перечней дефектов /// </summary> private Ais7IssoDefectsTreeNode2 BuildTree() { //Класс поключения к БД var connection = ConnectionClass.CreateDatabase(); // Получение наименований конструктивов, нужных для построения списков var tlList = connection.Query <TableList>("select n_gr_constr from v_gr_constr_def").ToList().Select(list => list.n_gr_constr).ToList(); // Текущий тип ИССО var typeIsso = connection.ExecuteScalar <int>($"select CTYPEISSO from I_ISSO where C_ISSO={CIsso}"); // Забираем значения групп конструкций для текущего типа ИССО var forCtypisso = connection.Query <TableList>( $"select C_GR_CONSTR as N_GR_CONSTR from TABLE_DELEGATES where ISSO_TYPE={typeIsso}"); // Построение первого уровня конструктивов var tableNames = connection.Query <DBHelper.TABLE_NAMES>( $"select SYS_NAME, DESCRIPTION, PARENT_ID, C_GR_CONSTR from TABLE_NAMES where C_GR_CONSTR in ({string.Join(',', forCtypisso.Select(x => x.n_gr_constr).ToList())})") .ToList(); //var table_Names = connection.Query<TABLE_NAMES>(String.Format("select n_gr_constr as SYS_NAME, text as DESCRIPTION, c_gr_constr, parent_group as PARENT_ID from S_GR_CONSTR " + // "order by c_gr_constr")); var infoRows = new List <InfoRow>(); foreach (var name in tableNames) { infoRows.Add(new InfoRow(name.SYS_NAME, name.DESCRIPTION, name.PARENT_ID, name.C_GR_CONSTR, -1)); } // Получаем весь список возможных дефектов AdvancedSGrConstrList = connection.Query <VGrConstrDef2>("select * from v_gr_constr_def2 order by parent_group, c_gr_constr").ToList(); // Список конструктивов AdvancedDefectsList = connection.Query <CustomDefectAlterTable>( "select s_def4constr.c_gr_constr, is_constr, s_defect.*, item_type, lock_expert, life, ord from s_def4constr " + "left outer join s_gr_constr on s_def4constr.c_gr_constr = s_gr_constr.c_gr_constr " + "left outer join s_defect on s_defect.c_defect = s_def4constr.c_defect").ToList(); connection.Close(); // Строим дерево var rootNode = new Ais7IssoDefectsTreeNode2(infoRows.Find(x => x.CGrConstr == 10).SysName, tlList, null, infoRows, AdvancedDefectsList); // Добавляем в дерево элементы конструктивов foreach (var sRow in AdvancedSGrConstrList) { try { var node = rootNode.LocateNode(sRow.PARENT_GROUP); node?.ChildrenNodes.Add(new Ais7IssoDefectsTreeNode(sRow, node, AdvancedDefectsList)); } catch (Exception ex) { Console.WriteLine(ex.Message); } } Console.WriteLine("Done!"); // Здесь будем смотреть, есть ли элементы дочерние для корневых в дереве foreach (var child in rootNode.ChildrenNodes.ToList()) { LeafCapturingMethod(child); } return(rootNode); }