메뉴 , 조직도 등등.....treeview 컨트롤 이용 본문

[PL]/C# & WPF

메뉴 , 조직도 등등.....treeview 컨트롤 이용

객과 함께. 2012. 1. 5. 00:48

'닷넷 (.NET) 프로그래머' 에서 올라온 자료를 이용해서 작성한 것임.

[ .aspx] - 그대로 이용을 했다.

 

<div>
        <asp:TreeView ID="treeview1" runat="server" onTreeNodePopulate="treeview1_TreeNodePopulate"          OnSelectedNodeChanged="treeview1_SelectedNodeChanged" ShowLines="true">
            <Nodes>
                <asp:TreeNode Text="대학교" Value="대학교" PopulateOnDemand="true" Expanded="false"></asp:TreeNode>
            </Nodes>
        </asp:TreeView>
    </div>

[.aspx.cs]

//cs 단도 그래로 이용한 것임. 약간 추가만 하였다.

public partial class _Default : System.Web.UI.Page
{
    private string TreeNo;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    /// <summary>
    /// treeview 컨트롤을 클릭 이벤트발생시킴
    /// </summary>
    protected void treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
    {
        int _depth = e.Node.Depth;

        switch (e.Node.Depth)
        {
            case 0:
                FIllCustomers(e.Node);
                break;
            case 1:
                FillOrders(e.Node);              
                break;
            case 2:
                FillSubOrders(e.Node);
                break;
        }
    }

    protected void FIllCustomers(TreeNode parent)
    {
        DataSet ds = GetDataSet("select distinct id , name from userTableName where pid = 0  order by name");
        foreach (DataRow row in ds.Tables[0].Rows)
        {
            TreeNode node = new TreeNode();
            node.Text = row["name"].ToString();
            node.Value = row["id"].ToString();
            node.PopulateOnDemand = true;
            node.SelectAction = TreeNodeSelectAction.SelectExpand;
            parent.ChildNodes.Add(node);
        }
    }


    protected void FillOrders(TreeNode parent)
    {
        DataSet ds = GetDataSet("select  id , name , pid from userTableName where pid = '" + parent.Value + "'");
        foreach (DataRow row in ds.Tables[0].Rows)
        {
            TreeNode node = new TreeNode();
            node.Value = row["id"].ToString();
            node.Text = row["name"].ToString();
            node.Value = row["pid"].ToString();
            node.PopulateOnDemand = true;
            node.SelectAction = TreeNodeSelectAction.SelectExpand;
            parent.ChildNodes.Add(node);
        }
    }

   //레벨이 2일때 이벤트가 일어나는 메서드 입니다.

    protected void FillSubOrders(TreeNode parent1)
    {
        DataSet ds = GetDataSet("declare @cnt int  select @cnt = id  from userTableName where name='" + parent1.Text + "' select * from userTableName where pid = @cnt");
        foreach (DataRow row in ds.Tables[0].Rows)
        {
            TreeNode node = new TreeNode();
            node.Text = row["name"].ToString();
            node.Value = row["id"].ToString();
            node.PopulateOnDemand = false;   //다음 레벨의 이름이 있을시에 이것을 true로 바꾸어 주면 다음 레벨이 보여짐.
            node.SelectAction = TreeNodeSelectAction.SelectExpand;
            parent1.ChildNodes.Add(node);
        }
    }

    protected void treeview1_SelectedNodeChanged(object sender, EventArgs e)
    {
        TreeNo = treeview1.SelectedValue.ToString();
    }

    private DataSet GetDataSet(string sql)
    {
        string connstr = @"Password=***********;Persist Security Info=True;User ID=user table;Initial Catalog=TreeMenu;Data Source=(local)";
        SqlDataAdapter da = new SqlDataAdapter(sql, connstr);
        DataSet ds = new DataSet();
        da.Fill(ds);
        return ds;
    }
   
}

 

[db table]

create table userTableName

(    

id int null,

name nvarchar(50) null ,

pid int null

)

'[PL] > C# & WPF' 카테고리의 다른 글

DateTime변환  (0) 2012.05.31
[펌] PHP(TIME() , MKTIME())과 비슷한 ASP.NET 메소드  (0) 2012.05.30
[ASP.NET] 사용자 정의 컨트롤 사용  (0) 2011.09.22
프로퍼티(Property)  (0) 2011.07.22
[c#.net] Request 객체와 Response객체   (0) 2011.07.19