트리뷰] 트리뷰 노드추가하기 2
이건 웹페이지에서임.
누님 공부를 도와주면서 설명해준 소스임.
방식은 앞서 트리뷰 노드 추가와 같으나
그 처리 방식이 조금 다름.
데이타를 가져와서
이걸 TreeNode를 상속받은 cTreeNode로 바꾼다
그리고 cTreeNode[] 를 순차적으로 돌면서
자기를 참조하고 있는 자식이 될 노드들을 찾아서 추가하게 됨.
이때 자신이 참조하는 값이 0이면 트리뷰에 직접 붙인다.( Root 를 가리키는 셈임 )
protected void Page_Load(object sender, EventArgs e)
{
TreeView1.SelectedNodeChanged += new EventHandler(TreeView1_SelectedNodeChanged);
if (!IsPostBack)
{
SetPage();
}
}
public class cTreeNode : TreeNode
{
bool isDelete = false;
public bool IsDelete
{
get { return isDelete; }
set { isDelete = value; }
}
int seqNo = 0;
public int SeqNo
{
get { return seqNo; }
}
int parentNo = 0;
public int ParentNo
{
get { return parentNo; }
}
public cTreeNode(int seq, int pno, string _text, string _value)
{
this.seqNo = seq;
this.parentNo = pno;
this.Text = _text;
this.Value = _value;
}
}
private void SetPage()
{
try
{
TreeView1.Nodes.Clear();
DataSet ds = new BusinessLayer().SelectCategory();
if (ds != null && ds.Tables.Count > 0)
{
cTreeNode[] ctreenodes = GetTreeNode(ds.Tables[0]); //목록이 담긴 테이블을 넘겨준다.
Binding(ctreenodes); //트리뷰에 바뀐 TreeNode를 집어 넣는 부분
ds.Clear();
ds.Dispose();
}
ds = null;
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
/// 1. DataRow -> TreeNode 변환
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
#region
private cTreeNode[] GetTreeNode(DataTable dt)
{
cTreeNode[] trNodes = new cTreeNode[dt.Rows.Count];
int cnt = 0;
int seq = 0;
int pno = 0;
string title = string.Empty;
foreach (DataRow dr in dt.Rows)
{
seq = Convert.ToInt32( dr["SEQNO"] );
pno = Convert.ToInt32(dr["PARENTNO"] == DBNull.Value ? "0" : dr["PARENTNO"]);
title = dr["TITLE"].ToString();
trNodes[ cnt++ ] = new cTreeNode( seq, pno, title, title+"_value" ); //cTreeNode가 1개씩 만들어져서 채워짐
}
return trNodes;
}
#endregion
/// <summary>
/// 트리노드 하나로 묶어주기
/// </summary>
/// <param name="trNodes"></param>
/// <returns></returns>
#region Binding(cTreeNode[] trNodes)
private void Binding(cTreeNode[] trNodes)
{
TreeNode tNode = null;
foreach (cTreeNode trNode in trNodes)
{
if (trNode.ParentNo == 0)
{
TreeView1.Nodes.Add( trNode );
tNode = trNode;
}
TreeDepth(trNodes, trNode);
}
}
#endregion
/// <summary>
/// 자기를 참조 하고 있는 노드를 아래로 붙이는 메서드.
/// </summary>
/// <param name="trNodes">목록리스트</param>
/// <param name="trNode">선택된값</param>
#region TreeDepth(cTreeNode[] trNodes, cTreeNode trNode)
private void TreeDepth(cTreeNode[] trNodes, cTreeNode trNode)
{
foreach (cTreeNode tNode in trNodes)
{
if (trNode.SeqNo == tNode.ParentNo) //자기를 참조하고 있는 노드인지
{
trNode.ChildNodes.Add(tNode); //자신을 참조하고 있으면 자기 아래로 붙이기.
}
}
}
#endregion
private void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(this.GetType(), "selectTreeNode", "alert('" + TreeView1.SelectedNode.Text + "를 선택했습니다.');", true);
}
'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글
Form 사이즈 변경 못하게 막기 (0) | 2009.05.14 |
---|---|
MDI 창에서 스크롤바~ (0) | 2009.05.14 |
트리뷰] 트리뷰 노드추가하기 1 (0) | 2009.05.09 |
Html Table 파싱 (0) | 2009.05.09 |
게임 챗팅창처럼... (0) | 2009.05.09 |