1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace WinComposite
{
public partial class frmNodes : Form
{
public frmNodes()
{
InitializeComponent();
}
private Random rndSalary = new Random();
Node president, marketVP, salesMgr, advMgr, prodVP, prodMgr, shipMgr;
private void btnBuildTree_Click(object sender, EventArgs e)
{
buildEmployeeList();
buildTree();
}
//build un tree de test avec INode
private void buildEmployeeList()
{
president = new Node (null,"CEO", 200000);
marketVP = new Node( president,"Marketing VP", 100000);
president.add(marketVP);
salesMgr = new Node(marketVP, "Sales Mgr", 50000);
advMgr = new Node(marketVP, "Advt Mgr", 50000);
marketVP.add(salesMgr);
marketVP.add(advMgr);
//add salesmen reporting to sales manager
for (int i = 1; i<=5; i++)
{
salesMgr.add("Sales" + i.ToString(),
rndSalary.Next(30000));
}
prodVP = new Node(president, "Production VP", 100000);
president.add(prodVP);
advMgr.add("Secy", 20000);
prodMgr = new Node (prodVP,"Prod Mgr", 40000);
shipMgr = new Node (prodVP,"Ship Mgr", 35000);
prodVP.add(prodMgr);
prodVP.add(shipMgr);
for (int i = 1; i<=3; i++)
{
shipMgr.add("Ship" + i.ToString(), rndSalary.Next(25000));
}
for (int i = 1; i<=4; i++)
{
prodMgr.add("Manuf" + i.ToString(), rndSalary.Next(20000));
}
}
//class custom TeeNode pour display
public class MyTreeNode : TreeNode
{
private INode nd;
public MyTreeNode(INode ond) :
base(ond.getName())
{
nd = ond;
}
//-----
public INode getEmployee()
{
return nd;
}
}
//construit le treenode pour treeview
private void buildTree()
{
MyTreeNode rootNode = null;
MyTreeNode nod;
nod = new MyTreeNode(president);
rootNode = nod;
EmpTree.Nodes.Add(nod);
addNodes(nod, president);
}
private void addNodes(MyTreeNode nod, INode racine)
{
MyTreeNode ndtree;
INode nd;
IEnumerator enumChilds = racine.getChildNodes();
while (enumChilds.MoveNext())
{
nd = (INode )enumChilds.Current;
ndtree = new MyTreeNode(nd);
nod.Nodes.Add(ndtree);
//recursively
addNodes(ndtree, nd);
}
}
//handler treeview pour les "salaries"
private void EmpTree_AfterSelect(object sender, TreeViewEventArgs e)
{
MyTreeNode node;
node = (MyTreeNode)EmpTree.SelectedNode;
getNodeSum(node);
}
private void getNodeSum(MyTreeNode node)
{
INode nd;
float sum;
nd = node.getEmployee();
sum = nd.getSalaries();
lbSalary.Text = sum.ToString();
}
//un button pour voir hierarchie
private void btShowNode_Click(object sender, EventArgs e)
{
MyTreeNode node;
node = (MyTreeNode)EmpTree.SelectedNode;
INode nd = node.getEmployee();
string hierarchies = "";
while (nd != null)
{
hierarchies += nd.getName() + "\n";
nd = nd.getParentNode();
}
MessageBox.Show(null, hierarchies, "Reporting chain");
}
}
} |
Partager