ASP.NET组织结构图的画法——数据来源读取数据库
2013-03-21 16:45 愿心平静面对 阅读(798) 评论(0) 编辑 收藏 举报今天整整忙了一天,终于给这个组织结构图画出来了
第一:数据库部分:
ID主键ID
Name 组织结构名称
FavID 父组织ID
主要是这三个字段 若是没有父组织,则父组织给FavID=0
第二:添加一个开源的dll:Whidsoft.WebControls.OrgChart.dll下载地址:点击下载控件源码
下载后生成一个dll放到项目中就可以使用了,下面是使用方法
第三:静态使用方法
前台页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %> <%@ Register TagPrefix="oc" Namespace="Whidsoft.WebControls" Assembly="Whidsoft.WebControls.OrgChart" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>无标题页</title> <style type="text/css"> .alink a,a:hover,a:visited{ color:Black; text-decoration:none; } </style> </head> <body> <form id="Form1" method="post" runat="server"> <div class="alink"> <oc:orgchart id="OrgChart1" style="z-index: 101; left: 104px; position: absolute; top: 88px" runat="server" LineColor="Silver" Width="100%" Height="100%" ChartStyle="Vertical" ToolTip="test"></oc:orgchart> </div> </form> </body> </html>
protected void Page_Load(object sender, EventArgs e)
{
string style = Request.QueryString["style"];
if (style == null || style == "")
{
style = "1";
}
if (!IsPostBack)
{
//每一个组织图中的节点都是一个OrgNode,各属性分别为显示名称,tips
OrgNode orgNode = new OrgNode();
orgNode.Text = "罗宝线<br/><span style=\"color:red;\">主管</span>";
//orgNode.Description =
orgNode.Description = "这是组织图的塔尖";
orgNode.NavigateUrl = "http://www.whidsoft.cn";
orgNode.UnderDesc = "累计电度:1000万度,占线路用电 100%";
//建立各节点
OrgNode OrgNode1 = new OrgNode();
OrgNode1.Text = "车站照明动力";
OrgNode1.Description = "这是";
OrgNode1.UnderDesc = "累计电度:55万度,占线路用电 65%";
OrgNode OrgNode11 = new OrgNode();
OrgNode11.Text = "车站1";
OrgNode11.Description = "这是";
OrgNode11.UnderDesc = "累计电度:33万度,占线路用电 13%";
OrgNode OrgNode12 = new OrgNode();
OrgNode12.Text = "车站2";
OrgNode12.Description = "这是";
OrgNode12.UnderDesc = "累计电度:133万度,占线路用电 33%";
OrgNode OrgNode13 = new OrgNode();
OrgNode13.Text = "车站3";
OrgNode13.Description = "这是";
OrgNode13.UnderDesc = "累计电度:13万度,占线路用电 33%";
OrgNode1.Nodes.Add(OrgNode11);
OrgNode1.Nodes.Add(OrgNode12);
OrgNode1.Nodes.Add(OrgNode13);
orgNode.Nodes.Add(OrgNode1);
OrgNode OrgNode2 = new OrgNode();
OrgNode2.Text = "牵引动力";
OrgNode2.Description = "这是";
OrgNode2.UnderDesc = "累计电度:13万度,占线路用电 11%";
OrgNode OrgNode21 = new OrgNode();
OrgNode21.Text = "1段牵引";
OrgNode21.Description = "这是";
OrgNode OrgNode22 = new OrgNode();
OrgNode22.Text = "2段牵引";
OrgNode22.Description = "这是";
OrgNode2.Nodes.Add(OrgNode21);
OrgNode2.Nodes.Add(OrgNode22);
orgNode.Nodes.Add(OrgNode2);
OrgNode OrgNode3 = new OrgNode();
OrgNode3.Text = "维修段";
OrgNode3.Description = "这是3";
OrgNode3.UnderDesc = "累计电度:345万度,占线路用电 54%";
OrgNode OrgNode31 = new OrgNode();
OrgNode31.Text = "检修";
OrgNode31.Description = "这是3";
OrgNode OrgNode32 = new OrgNode();
OrgNode32.Text = "洗车及污水";
OrgNode32.Description = "这是3";
OrgNode OrgNode33 = new OrgNode();
OrgNode33.Text = "综合办公楼";
OrgNode33.Description = "这是3";
OrgNode3.Nodes.Add(OrgNode31);
OrgNode3.Nodes.Add(OrgNode32);
OrgNode3.Nodes.Add(OrgNode33);
orgNode.Nodes.Add(OrgNode3);
OrgNode OrgNode4 = new OrgNode();
OrgNode4.Text = "管理中心";
OrgNode4.Description = "这是3";
OrgNode4.UnderDesc = "累计电度:234万度,占线路用电 34%";
OrgNode OrgNode41 = new OrgNode();
OrgNode41.Text = "办公";
OrgNode41.Description = "这是3";
OrgNode OrgNode42 = new OrgNode();
OrgNode42.Text = "商业";
OrgNode42.Description = "这是3";
OrgNode OrgNode43 = new OrgNode();
OrgNode43.Text = "机房";
OrgNode43.Description = "这是3";
OrgNode4.Nodes.Add(OrgNode41);
OrgNode4.Nodes.Add(OrgNode42);
OrgNode4.Nodes.Add(OrgNode43);
orgNode.Nodes.Add(OrgNode4);
OrgChart1.Node = orgNode;
OrgChart1.ChartStyle = (style == "1") ? Whidsoft.WebControls.Orientation.Vertical : Whidsoft.WebControls.Orientation.Horizontal;
}
}
或者是动态读取数据库方式,这里前台部分不需要改动,只需要后台些方法就好,主要是一个递归的方法
private void Bind() { string style = Request.QueryString["style"]; if (style == null || style == "") { style = "1"; } //1.数据查询 Hashtable ht = new Hashtable(); ht.Add("FavHROID", 0); IList<HROrganization> HROLst = HROrganizationService.GetInstance().FindAll(ht); OrgNode orgNode = new OrgNode(); orgNode.Text = HROLst[0].Name; Hashtable ht1 = new Hashtable(); ht1.Add("FavHROID", HROLst[0].ID); AddNode(ht1, orgNode); OrgChart1.Node = orgNode; OrgChart1.ChartStyle = (style == "1") ? Whidsoft.WebControls.Orientation.Vertical : Whidsoft.WebControls.Orientation.Horizontal; } /// <summary> /// 给节点赋值 /// </summary> /// <param name="ht1"></param> /// <param name="orgNode"></param> private void AddNode(Hashtable ht1, OrgNode orgNode) { IList<HROrganization> HROLst2 = HROrganizationService.GetInstance().FindAll(ht1); foreach (HROrganization item2 in HROLst2) { OrgNode OrgNode2 = new OrgNode(); OrgNode2.Text = item2.Name; orgNode.Nodes.Add(OrgNode2); Hashtable ht2 = new Hashtable(); ht2.Add("FavHROID", item2.ID); AddNode(ht2, OrgNode2); } }
希望对大家稍有帮助