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);
}
}
}