ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#] DataTable → Treeview
    Programming/C# 2011. 6. 30. 20:56
    DataTable에 있는 계층적 데이터를 트리뷰로 보여주는 방법..
    일단 보여줘야되는 데이터를 dataTable로 받아온다..
    받아온 DataTable → DataRow[] 로변환한다. 
    이후 재귀함수를 이용하여 트리뷰에 보여주기전 재귀함수 작업을 진행한다..

    출처 : 어느 인터넷 ... (죄송: 급하게 찾다보니 출처를 까먹었네요 저작권에 문제가 되는경우 댓글 달아주세요)
    void GetLotInfo()
    {
    		// 데이터 가져와서 
        DataTable dataTable = new DataTable("TableName");
        DataRow[] dataRow = new DataRow[dataTable.Rows.Count];
        treeDataTable.Rows.CopyTo(dataRow, 0);
    
        treeLotHistory.BeginUpdate();
        treeLotHistory.Nodes.Clear();
        RadTreeNode[] nodes = GetTreeNodes(dataRow);
        treeLotHistory.Nodes.AddRange(nodes);
        treeLotHistory.EndUpdate();
    }
    
    RadTreeNode[] GetTreeNodes(DataRow[] dataRow)
    {
        List nodeList = new List();
        RadTreeNode node = null;
        foreach (DataRow dr in dataRow)
        {
            node = new RadTreeNode(dr["columns1"].ToString()); // 부모노드.. 
            noteID = Convert.ToInt32(dr["level"].ToString());
            node.Name = noteID.ToString();
            node.ToolTipText = noteID.ToString();
            if (nodeList.Find(FindNode) == null)
            {
                DataRow[] childRows = treeDataTable.Select(dr["columns1"].ToString()); // 자식노드
                if (childRows.Length > 0)
                {
                    RadTreeNode[] childNodes = GetTreeNodes(childRows);
                    node.Nodes.AddRange(childNodes);
                }
                nodeList.Add(node);
            }
        }
        RadTreeNode[] nodeArr = nodeList.ToArray();
        return nodeArr; 
    }
    private static bool FindNode(RadTreeNode n)
    {
        if (n.Nodes.Count == 0)
        {                
            return n.Name == noteID.ToString();
        }
        else
        {
            while (n.Nodes.Count > 0)
            {
                foreach (RadTreeNode tn in n.Nodes)
                {
                    if (tn.Name == noteID.ToString())
                        return true;
                    else
                        n = tn;
                }
           }
            return false;
        }
    }
    protected void ColorNodes(RadTreeNode root, Color firstColor, Color secondColor)
    {
        root.ForeColor = root.Index % 2 == 0 ? firstColor : secondColor;
        foreach (RadTreeNode childNode in root.Nodes)
        {
            Color nextColor = childNode.ForeColor = childNode.Index % 2 == 0 ? firstColor : secondColor;
            if (childNode.Nodes.Count > 0)
            {
                // alternate colors for the next node 
                if (nextColor == firstColor)
                    ColorNodes(childNode, secondColor, firstColor);
                else
                    ColorNodes(childNode, firstColor, secondColor);
            }
        }
    }
Designed by Tistory.