пятница, 27 февраля 2009 г.

Формирование графиков с использованием XML\SWF Charts

Недавно я писал про возможность формирования графиков с использованием компонента MSChart от компании Microsoft. Следует отметить, что компонент хоть и позволяет осуществлять собственную пользовательскую доработку, на данный момент сыроват. Если есть желание использовать сразу что-то красивое и удобное - вариант есть. Это flash-приложение XML\SWF Charts.
Библиотека предоставляет приличное множество графиков. Параметризирование получаемого графика производится с использованием XML. Например, такого:
<chart>

<!-- Chart style -->
<chart_rect x='90' y='20' width='430' height='170' />
<chart_transition type='slide_down' order='series' />

<legend_rect x='100' y='10' width='450' height='30' />
<legend_label layout="horizontal" bullet="line" size='10' bold="true" />
<legend_transition type='slide_up' delay='1' duration='1' />


<!-- Axis styles -->
<axis_category min='0' max='120' size='10' skip='4' />

<axis_value prefix='$' size='10' separator=',' />
<chart_grid_h thickness="2" color='000000' type='solid' />


<!-- Series styles -->
<chart_type>
<string>line</string>
<string>line</string>
<string>column</string>
</chart_type>

<chart_pref line_thickness='2' point_shape='none' />
<chart_pref line_thickness='2' point_shape='none' />

<series_color>
<color>66FF33</color>
<color>B200FF</color>
<color>F88800</color>
</series_color>


<!-- Chart data -->
<chart_data>
</chart_data>

</chart>

XML-файл, содержащий описание требуемого графика передается flash-приложению через GET-параметр xml_source. Примерный ASP-код формирование интересующего графика представлен ниже. Разумеется, ASP тут ни при чем. Аналогично можно использовать любую другую технологию web-разработки.
buffer.Append( "<param name='movie' value='flash/charts.swf?library_path=flash/charts_library&xml_source=Chart.aspx' >" );

Заготовка файла Chart.aspx.cs может иметь, например, следующий вид:
protected void Page_Load(object sender, EventArgs e)
{
Response.Clear();
Response.ContentType = "text/xml";
Response.Expires = -1;
Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.AddHeader("Cache-Control", "no-cache");

string fileName = Server.MapPath("~/sample.xml");
XmlDocument doc = new XmlDocument();
try
{
doc.Load(fileName);
XmlNode node = doc.SelectSingleNode("chart/chart_data");

//Код формирования данных в ноде chart_data

Response.Write(doc.InnerXml);
}
catch (Exception ex)
{
Response.Write("<chart></chart>");
}
Response.End();
}

Таким образом на свою скромную страничку можно добавить красивые графики с элементами интерактива, особенно не запариваясь с использованием MSChart или тега canvas стандарта html5.