트리뷰] 트리뷰 노드추가하기 1
옛날 옛날에 만들었던...
트리는 구조만 제대로 파악한다면, 의외로 쉽다.
디자인 패턴에서 Composite도 트리형태로 구현이 가능하다.
예전에 만들었던 내용대로 올림.
간단하게 우측에 보이는 데이타 구조에서
메뉴네임을 순차적으로 돌면서 참조하고있는 노드를 자기 아래노드로 추가시키는 방법임.
재귀 호출관련해서 알고 있으면 이해가 편함.
// 아래는 소스임
DataTable TreeMenu = new DataTable();
private void Form1_Load(object sender, System.EventArgs e)
{
TreeMenu.Columns.Add("MenuName");
TreeMenu.Columns.Add("Parents");
DataRow dr ;
dr = TreeMenu.NewRow();
dr[0] = "A"; dr[1] = "root";
TreeMenu.Rows.Add( dr);
dr = TreeMenu.NewRow();
dr[0] = "B"; dr[1] = "A";
TreeMenu.Rows.Add( dr);
dr = TreeMenu.NewRow();
dr[0] = "C"; dr[1] = "A";
TreeMenu.Rows.Add( dr);
dr = TreeMenu.NewRow();
dr[0] = "D"; dr[1] = "B";
TreeMenu.Rows.Add( dr);
dr = TreeMenu.NewRow();
dr[0] = "E"; dr[1] = "D";
TreeMenu.Rows.Add( dr);
dr = TreeMenu.NewRow();
dr[0] = "F"; dr[1] = "B";
TreeMenu.Rows.Add( dr);
dr = TreeMenu.NewRow();
dr[0] = "G"; dr[1] = "C";
TreeMenu.Rows.Add( dr);
dr = TreeMenu.NewRow();
dr[0] = "H"; dr[1] = "root";
TreeMenu.Rows.Add( dr);
this.dataGrid1.DataSource = TreeMenu;
// root 꼭데기 찾아서 추가!!
DataRow[] selectRows = TreeMenu.Select("Parents='root'");
for( int i = 0 ; i < selectRows.Length ; i++)
this.treeView1.Nodes.Add( new TreeNode( selectRows[i][0].ToString(), GetTreeNodes( TreeMenu , selectRows[i][0].ToString()) ) );
DataSet ds = new DataSet();
ds.Tables.Add( TreeMenu );
ds.WriteXml(@"C:\treeMenu.xml", XmlWriteMode.IgnoreSchema );
}
// 재귀함수에 의해 treenode추가!
private TreeNode[] GetTreeNodes( DataTable dtSource, string Parens )
{
TreeNode[] returnTreeNodes;
DataRow[] selectRows = dtSource.Select("Parents='"+Parens+"'");
returnTreeNodes = new TreeNode[ selectRows.Length ];
for( int idx = 0; idx < selectRows.Length ; idx++)
{
returnTreeNodes[idx] = new TreeNode( selectRows[idx][0].ToString() , GetTreeNodes( dtSource , selectRows[idx][0].ToString() ) );
returnTreeNodes[idx].Tag = selectRows[idx][0].ToString();
}
return returnTreeNodes;
}
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(e.Node.GetNodeCount( true ) == 0)
this.Text = e.Node.Text;
}
'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글
MDI 창에서 스크롤바~ (0) | 2009.05.14 |
---|---|
트리뷰] 트리뷰 노드추가하기 2 (0) | 2009.05.09 |
Html Table 파싱 (0) | 2009.05.09 |
게임 챗팅창처럼... (0) | 2009.05.09 |
드레그 앤 드랍! (2) (0) | 2009.05.09 |
메뉴] 자바스크립트로 만든 메뉴객체를 이용.
'# 2) .Net ( Vs 2005 ) > WebForm' 카테고리의 다른 글
Asp.Net] Razor, MVC 스터디.. (0) | 2018.03.15 |
---|---|
달력을 만들때... (0) | 2009.05.11 |
철호야! 공부하자! (0) | 2009.05.08 |
리피터 사용!! (0) | 2009.05.08 |
Table Row-> Select, MouseOver, Out관련 (0) | 2009.05.08 |
메뉴] 자바스크립트로 만든 메뉴 객체
자바스크립트로 메뉴관리 객체를 만들었음.
/*
자바스크립트
메뉴 Display
제작 윤지송 aseuka@hanmail.net
2008.07.27
*/
// 크기정보 변수
function Size(_width, _height)
{
this.Width = _width;
this.Height = _height;
this.toString = function()
{
return "Width:("+this.Width.toString() +"), Height:("+this.Height.toString()+")"+"\n";
}
return this;
}
// 위치정보 변수
function Point( x, y)
{
this.X = x;
this.Y = y;
this.toString = function()
{
return "X:("+this.X +"), Y:("+this.Y+")"+"\n";
}
return this;
}
// 단일 1개의 이미지 Icon 정보.
function imgIcon( path, _x, _y, _width, _height, _linkURL )
{
this.ImgPath = path;
this.ImgLoction = new Point(_x, _y);
this.ImgSize = new Size( _width, _height );
this.LinkURL = _linkURL;
this.toString = function()
{
var returnString = "Path :" + this.ImgPath+"\n";
returnString += "Loction :" + this.ImgLoction.toString();
returnString += "Size :" + this.ImgSize.toString();
return returnString;
}
return this;
}
// Sub 메뉴Icon별 관리 객체.
function ImgIcons( _name )
{
this.Name = _name;
this.imgs = new Array();
this.Add = function( _path, _x, _y, _width, _height, _linkURL )
{
this.imgs[ this.imgs.length ] = new imgIcon( _path, _x, _y, _width, _height, _linkURL );
}
this.toString = function()
{
var returnString = "";
for( i = 0; i < this.imgs.length ; i ++ )
{
returnString += this.imgs[i].toString() + "|";
}
return returnString;
}
return this;
}
/*
//////////////////////////////////////////////////////////////////////////////////
*/
// 메뉴 관리 하는 객체.
function MenuList( _Id , _divName )
{
this.Id = _Id;
// 나타날 divId
this.divName = _divName;
this.ar = new Array();
this.Add = function( imgIcons )
{
this.ar[ this.ar.length ] = imgIcons;
}
this.GetImgIcons = function( ArrayName )
{
for( i = 0; i < this.ar.length; i++)
{
if(this.ar[i].Name == ArrayName)
{
return this.ar[i];
}
}
return null;
}
this.MakeImg = function( imgIcon )
{
var CreateImgHTML = "<img src='" +imgIcon.ImgPath +"' ";
CreateImgHTML += " style='width:"+imgIcon.ImgSize.Width +";";
CreateImgHTML += " height:"+imgIcon.ImgSize.Height+ ";border:0;'";
CreateImgHTML += " onmouseover='"+this.Id+".bImgMouseOver=true;'";
CreateImgHTML += " onmouseout='"+this.Id+".MouseOut();'";
CreateImgHTML += " >";
var AtagHTML = "<a href='"+imgIcon.LinkURL+"' >" + CreateImgHTML +"</a>";
if( imgIcon.LinkURL )
{
return AtagHTML;
}
else
{
return CreateImgHTML;
}
}
this.ClearLayer = function( )
{
if(this.bImgMouseOver == false)
{
var div = document.getElementById(this.divName);
div.innerHTML = "";
div.style.display = "none";
}
}
return this;
}
// 객체 속성 정의
MenuList.prototype =
{Vertical: false // 가로(false) 세로(true)...
,
TimerInterVal : 1000
,
bImgMouseOver: false
,
MouseOut : function(){
var fn_repeater = this.Id+".ClearLayer()";
this.bImgMouseOver = false;
this.tmID = setTimeout( fn_repeater , this.TimerInterVal );
}
,
MouseOver: function( img, arName ){
var strTagString = "";
var div = document.getElementById(this.divName);
this.bImgMouseOver = true;
var subMenuArray = this.GetImgIcons(arName);
if( subMenuArray && div )
{
div.innerHTML = "";
for( i = 0 ; i < subMenuArray.imgs.length ; i++)
{
strTagString += this.MakeImg( subMenuArray.imgs[i] );
}
if( img )
{
div.style.top = ((img.style.top ? img.style.top : 0) + img.height + 10);
div.style.left = (img.style.left? img.style.left : 0);
// 가로
if( this.Vertical == false )
{
div.style.width = img.width * subMenuArray.imgs.length;
div.style.height = 0;
}
else
{
div.style.width = img.width;
div.style.height = img.height;
}
div.style.zindex = 200;
div.style.position ='absolute';
}
div.innerHTML = strTagString;
div.visibility = "show";
div.style.display = "block";
}
}
};
메뉴를 구현한 js 파일
'# 6) JavaScript' 카테고리의 다른 글
자바 스크립트] XOR 암호화. (0) | 2010.12.31 |
---|---|
[javascript] 정규식 관련.. (0) | 2010.11.18 |
자바스크립트 Array사용 (0) | 2009.05.08 |
자바스크립트 디버거 (0) | 2009.05.08 |
웹 에서 F1키 사용하기. (0) | 2009.05.08 |