소년포비의 세계정복!!

TreeControl 구현 Class 본문

윈도우폰 세상/Windows Phone

TreeControl 구현 Class

소년포비 2009. 9. 27. 14:25

1. TreeControl Class 파일첨부.

2. 사용예.

   ⓐ Load시 LEVEL1 노드 출력 - Level1Draw() 호출

        // 레벨1을 구성한다.
        private void Level1Draw()
        {
            #region 조직정보 LEVEL1 TreeView 구성
            Cursor.Current = Cursors.WaitCursor;
            int[] columnType = { 0, 0, 0, 0, 0 };

            // 파일에서 조직정보를 읽어와서 데이타셋에 저장
            dsOrg = Ft.FillDataSet(InspectOrgFileNM, 5, columnType);
            dv = dsOrg.Tables[0].DefaultView;
            dv.RowFilter = "COL0 = 1";
           
            // 최상위 LEVEL 생성 (트리컨트롤, 조직정보 데이타셋, 조직명컬럼, Level컬럼)
            Tree.DrawOrgTreeLevel1(TreeOrg, dv, 2, 1);
            TreeOrg.ExpandAll();
            Cursor.Current = Cursors.Default;
            #endregion
        }

 

   ⓑ 노드 선택시 하위 노드 보여주기

        // 트리노드 선택시 선택노드 하위노드를 구성한다.
        private void TreeOrg_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
        {
            #region 부서선택시 하위 부서 출력 및 부서명 텍스트 박스에 보여주기
            SipShowIM(0);
            if (formLoadChk)
            {
                formLoadChk = false;
                return;
            }
            try
            {
                // 선택된 부서가 "원자력연구원" 일때는 텍스트박스에 "원자력연구원"을 넣어준다.
                if (TreeOrg.SelectedNode.Text == Ft.KAERINAME)
                {
                    TbOrg.Text = Ft.KAERINAME;
                    return;
                }
                // 선택된 부서명을 텍스트 박스에 보여준다. [조직코드]는 제외한다.
                if (TreeOrg.SelectedNode.Text != "" || TreeOrg.SelectedNode.Text != null)
                {
                    string[] arrOrgNM = TreeOrg.SelectedNode.Text.Split('[');
                    TbOrg.Text = arrOrgNM[0];
                }
                // 하위 노드가 이미 있는 경우는 리턴(중복으로 하위부서가 추가되므로)
                if (TreeOrg.SelectedNode.GetNodeCount(false) > 0)
                    return;               
                // 선택된 상위부서에 속한 하위부서 생성
                ChildLevelDraw(TreeOrg.SelectedNode);              
            }
            catch (Exception) // ObjectDisposedException
            {
                MessageBox.Show("부서 선택시 에러가 발생했습니다.", "재물조사대상부서선택", MessageBoxButtons.OK,
                    MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
            #endregion
        }

        // TreeOrg_AfterSelect 이벤트에서 선택한 노드 하위 노드를 구성한다.
        private void ChildLevelDraw(TreeNode selNode)
        {
            #region 조직정보 하위LEVEL TreeView 구성
            // 선택한 노드의 부서코드를 가져온다.(상위부서노드)
            string[] arrOrgCd = selNode.Text.Split('[');
            string[] OrgCd = arrOrgCd[1].Split(']');
            dv.RowFilter = "COL1 = '" + OrgCd[0] + "'";
            string ParentNodeCd = dv[0][1].ToString();

            // 가져온 부서코드가 상위부서코드인 하위부서를 가지고 View를 만든다.
            dv = dsOrg.Tables[0].DefaultView;
            dv.RowFilter = "COL4 = '" + ParentNodeCd + "'";
           
            // 하위부서를 상위부서에 추가 시킨다.
            Tree.DrawOrgTreeLevel(selNode, dv, 2, 1, 0);
           
            // 자식노드 확장
            TreeOrg.SelectedNode.ExpandAll();
            #endregion
        }

   ⓒ 노드 조회하기

        // 검색시 모든 노드를 구성하고 검색을 한다.
        // TreeDataDrawLoop를 호출한다.
        private void BtnSearch_Click(object sender, System.EventArgs e)
        {
            #region 트리 조회(부서조회)
            SipShowIM(0);

            #region Validation
            if (TbOrg.Text == "")
                return;

            // 검색명 입력을 안하고 트리에서 조직선택하고 검색을 누를때 방지.
            if (!searchChk)
                return;

            // 검색시 루프를 반복적으로 돌지 않도록 플래그를 두었다.
            Tree.bLoopReturn = false;
            #endregion

            int[] DataTableType ={ 0, 0, 0 };

            #region 검색시 트리를 전부 다시 그린다.(모든 부서를 그리고 검색하도록 해야한당)
            // 다시 그리는 이유는 마스터정보 받기에서 "원자력연구원"을 체크했을 때의 경우와 같다.
            // 아 정말 무식하다.. ㅠ_ㅠ
            foreach (TreeNode node in TreeOrg.Nodes[0].Nodes)
            {
                node.Nodes.Clear();
                TreeDataDrawLoop(node);
            }
            #endregion

            Tree.TreeNodeSearch(TreeOrg, dsOrg, "COL2", TbOrg.Text, 0, null);

            searchChk = false;
            #endregion
        }

        // 부서 조회시 LEVEL1에 대한 노드를 가지고 loop를 돌면서 하위 노드를 구성한다.
        private void TreeDataDrawLoop(TreeNode node)
        {
            #region 노드를 검색해서 해당 부서를 찾는다.
            // 선택한 노드의 부서코드를 가져온다.(상위부서노드)
            string[] arrOrgCd = node.Text.Split('[');
            string[] OrgCd = arrOrgCd[1].Split(']');
            dv.RowFilter = "COL1 = '" + OrgCd[0] + "'";
            string ParentNodeCd = OrgCd[0];
            // 가져온 부서코드가 상위부서코드인 하위부서를 가지고 View를 만든다.
            dv = dsOrg.Tables[0].DefaultView;
            dv.RowFilter = "COL4 = '" + ParentNodeCd + "'";
            // 하위부서를 상위부서에 추가 시킨다.
            Tree.DrawOrgTreeLevel(node, dv, 2, 1, 0);
            // 자식노드 확장
            TreeOrg.SelectedNode.ExpandAll();
            // 그 밑에 하위노드가 있는지 확인해서 또 추가
            foreach (TreeNode childnode in node.Nodes)
            {
                TreeDataDrawLoop(childnode);
            }
            #endregion
        } 

 

treemenu-kujasun.cs

 

treemenu-kujasun.cs
0.02MB