Programming/C#
[C#] DataTable → Treeview
Foolishdevil
2011. 6. 30. 20:56
DataTable에 있는 계층적 데이터를 트리뷰로 보여주는 방법..
일단 보여줘야되는 데이터를 dataTable로 받아온다..
받아온 DataTable → DataRow[] 로변환한다.
이후 재귀함수를 이용하여 트리뷰에 보여주기전 재귀함수 작업을 진행한다..
출처 : 어느 인터넷 ... (죄송: 급하게 찾다보니 출처를 까먹었네요 저작권에 문제가 되는경우 댓글 달아주세요)
일단 보여줘야되는 데이터를 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); } } }