DevExpressWinForm DiagramControl组织结构图自定义生成数据并展示
这里面绘图主要靠数据源内部的KeyMember 和ParentMember 作为索引。KeyMember 是节点本身,ParentMember 是父节点。
diagramOrgChartController1.KeyMember = "Tei";// "Tei";
diagramOrgChartController1.ParentMember = "FatherTei";//"FatherTei";
diagramOrgChartController1.BeginInit();
bindingSource1.DataSource = EmployeesData.GetOrgChartTopo();
diagramOrgChartController1.EndInit();
public static IEnumerable<object> GetOrgChartTopo()
{
//TODO specify the number of each layer.
int nMaxNumberEachLevel = 500;//ideal:1024
TopoData allTopo = new TopoData();
int i = 0;
int nFather = 0;
Topo topo = new Topo();
topo = AddOneNode(allTopo, ref i, ref i);
//TODO the total level number is fixed value of 15.
for (int y = 0; y < 4; y++)//
{
nFather = i;
for (int x = 0; x < nMaxNumberEachLevel; x++)
{
AddOneNodeSameLevel(allTopo, ref i, nFather);
}
}
return allTopo;
}
private static Topo AddOneNode(TopoData allTopo, ref int i,ref int Father)
{
Topo topo = new Topo();
topo.Layer = 0;
Father = i;
topo.FatherTei = i++;
topo.Tei = i;
topo.NodeAddress = topo.Tei.ToString("000000000000");
topo.Type = "0";
allTopo.Add(topo);
return topo;
}
private static Topo AddOneNodeSameLevel(TopoData allTopo, ref int i, int Father)
{
Topo topo = new Topo();
topo.Layer = 0;
topo.FatherTei = Father;
topo.Tei = ++i;
topo.NodeAddress = topo.Tei.ToString("000000000000");
topo.Type = "0";
allTopo.Add(topo);
return topo;
}
public class TopoData : List<Topo>
{
}
public class Topo
{
/// <summary>
/// 节点地址
/// </summary>
public string NodeAddress { get; set; }
/// <summary>
/// 层级
/// </summary>
public int Layer { get; set; }
/// <summary>
/// 父节点Tei
/// </summary>
public int FatherTei { get; set; }
// <summary>
/// 本节点Tei
/// </summary>
public int Tei { get; set; }
// <summary>
/// 类型
/// </summary>
public string Type { get; set; }
}