Как я могу создать организационную диаграмму из инструментов Google Chart / API виртуализации с помощью .NET DataTable?

Я хочу создать организационную диаграмму, как показано здесь: http://code.google.com/apis/visualization/documentation/gallery/orgchart.html

Я могу создать строку JSON google.visualization.DataTable с помощью вспомогательной библиотеки .NET Visualization отсюда: http://code.google.com/p/bortosky-google-visualization/

К сожалению, с помощью этой вспомогательной библиотеки невозможно отобразить сообщение пользовательского формата, например, президента или вице-президента, для каждого члена организационной диаграммы, поскольку ключ f: не создается вспомогательной библиотекой.


person Mathias Florin    schedule 14.07.2010    source источник


Ответы (1)


Я смог решить этот вопрос, написав метод, который создает организационную диаграмму JSON из C# DataTable:

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();
        }

Как видно из приведенного выше кода, нам нужна таблица данных со столбцом Format, чтобы сгенерировать ключ f в JSON. Ниже приведен пример C# DataTable и вызова для создания JSON для API Google Chart:

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);

Дополнительные столбцы могут быть добавлены после столбца «Менеджер», и к ним можно получить доступ в JavaScript в событии выбора API-интерфейса Google Chart.

person Mathias Florin    schedule 14.07.2010