C# 如何使用.NET数据表从google图表工具/虚拟化api创建组织图表?

C# 如何使用.NET数据表从google图表工具/虚拟化api创建组织图表?,c#,json,google-api,google-visualization,C#,Json,Google Api,Google Visualization,我想创建一个组织结构图,如下所示: 我可以从以下位置使用.NET visualization helper库创建JSON google.visualization.DataTable字符串: 不幸的是,使用此帮助程序库,无法为每个组织结构图成员显示自定义格式的消息(如总裁或副总裁),因为f:键不是由帮助程序库生成的。我可以通过编写一个从C#数据表创建组织结构图JSON的方法来解决此问题: public string GoogleOrgChartJson(DataTable dt)

我想创建一个组织结构图,如下所示:

我可以从以下位置使用.NET visualization helper库创建JSON google.visualization.DataTable字符串:


不幸的是,使用此帮助程序库,无法为每个组织结构图成员显示自定义格式的消息(如总裁或副总裁),因为f:键不是由帮助程序库生成的。

我可以通过编写一个从C#数据表创建组织结构图JSON的方法来解决此问题:

public string GoogleOrgChartJson(DataTable dt)
        {
            if ((dt == null) || (dt.Columns.Count == 0)) return "";
            var sb = new StringBuilder();
            sb.Append("{cols: [");
            foreach (DataColumn dc in dt.Columns.Cast<DataColumn>().Where(dc => dc.Caption != "Format"))
            {
                sb.Append("{id: '");
                sb.Append(dc.Caption);
                sb.Append("', label: '");
                sb.Append(dc.Caption);
                sb.Append("', type: '");
                sb.Append(dc.DataType.Name.ToLower());
                sb.Append("'}, ");
            }
            sb.Remove(sb.Length - 2, 2);
            sb.Append("], rows: [");
            foreach (DataRow dr in dt.Rows)
            {
                sb.Append("{c: [");
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    if (dt.Columns[i].ToString() == "Format")
                    {
                        sb.Remove(sb.Length - 3, 3);
                        sb.Append(", f: '");
                    }
                    else
                        sb.Append("{v: '");

                    if ((dr[i] != DBNull.Value) && (string)dr[i] != "")
                        sb.Append(dr[i] + "'}, ");
                    else
                        sb.Append("'}, ");

                }
                sb.Remove(sb.Length - 2, 2);
                sb.Append("]}, ");
            }
            sb.Remove(sb.Length - 2, 2);
            sb.Append("]};");
            return sb.ToString();
        }
公共字符串GoogleOrgChartJson(数据表dt)
{
if((dt==null)| |(dt.Columns.Count==0))返回“”;
var sb=新的StringBuilder();
某人加上(“{cols:[”);
foreach(dt.Columns.Cast()中的数据列dc,其中(dc=>dc.Caption!=“格式”))
{
sb.附加(“{id:”);
某人附加(dc.标题);
sb.附加(“,标签:”);
某人附加(dc.标题);
sb.追加(“,类型:”);
sb.Append(dc.DataType.Name.ToLower());
某人附加(“'},”);
}
移除(sb长度-2,2);
sb.追加(“],行:[”;
foreach(数据行dr在dt.行中)
{
sb.附加(“{c:[”);
对于(int i=0;i
正如您从上面的代码中看到的,为了在JSON中生成f键,我们需要一个具有名为Format列的DataTable。 请在下面找到一个C#DataTable示例以及为google图表API创建JSON的调用:

var dt = new DataTable();
dt.Columns.Add("Name", typeof (String)).Caption = "Name";
dt.Columns.Add("Format", typeof (String)).Caption = "Format";
dt.Columns.Add("Manager", typeof (String)).Caption = "Manager";
dt.Rows.Add("Mathias Florin","Mathias Florin<div style=color:red; font-style:italic><p style=font-size:0.7em>Technical Leader</p></div>","Christian Florin");
dt.Rows.Add("Christian Florin","Christian Florin<div style=color:red; font-style:italic><p style=font-size:0.7em>CEO</p></div>","Christian Florin");
Page.ClientScript.RegisterStartupScript(GetType(), "vis", string.Format("var fundata = {0}", GoogleOrgChartJson(dt)), true);
var dt=new DataTable();
dt.Columns.Add(“名称”,typeof(字符串)).Caption=“名称”;
dt.Columns.Add(“格式”,typeof(字符串)).Caption=“格式”;
dt.Columns.Add(“管理者”,typeof(字符串)).Caption=“管理者”;
添加(“Mathias Florin”、“Mathias Florin

技术负责人”、“Christian Florin”); 添加(“Christian Florin”,“Christian Florin

CEO

”,“Christian Florin”); Page.ClientScript.RegisterStartupScript(GetType(),“vis”,string.Format(“var fundata={0}”,GoogleOrgChartJson(dt)),true);
可以在Manager列之后添加其他列,并且可以在googlechartapi的select事件中使用JavaScript访问这些列