轉帖|其它|編輯:郝浩|2011-01-25 14:00:51.000|閱讀 1575 次
概述:目前Visifire現在已經開始收費了,不過看到它實現的Chart效果,還是不舍得放手。經過我的不懈努力,終于找到了貌似是最后一個免費版本的Visifire v3.0,之前也有一些人研究過這類的東西,不過材料并不是很詳細,這里我利用閑的時間,把我研究的成果貼出來。本實例是基于Siverlight 3.0的,開發工具VS2010,主要展現的內容是,Siverlight結合Visifire+Webservice展現的Chart。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Visifire 是一個基于SilverLight的Chart組件,VISIFire 公司提供了 Open Source 的 Silverlight Chart 組件,遵循GPL v3,可以在 ASP, ASP.Net, PHP, JSP, CodeFusion, Ruby on Rails 以及 HTML 中使用。支持的Chart類型挺多的(支持餅圖,柱狀圖,圈圖,區圖等等)。
目前Visifire現在已經開始收費了,不過看到它實現的Chart效果,還是不舍得放手。經過我的不懈努力,終于找到了貌似是最后一個免費版本的Visifire v3.0,之前也有一些人研究過這類的東西,不過材料并不是很詳細,這里我利用閑的時間,把我研究的成果貼出來。
本實例是基于Siverlight 3.0的,開發工具VS2010,主要展現的內容是,Siverlight結合Visifire+Webservice展現的Chart。
創建Webservice
我們首先確定一下Chart的數據源,這里利用的Webservice返回XML作為數據源。
接來呢,隨機產生一下數據:
1 public class myService : System.Web.Services.WebService
2 {
3
4 [WebMethod]
5 public string mapData()
6 {
7 List<string> list = new List<string>();
8 list.Add("上海");
9 list.Add("北京");
10 list.Add("深圳");
11 list.Add("廣東");
12 list.Add("天津");
13 list.Add("南京");
14 list.Add("廣東");
15 list.Add("重慶");
16 list.Add("香港");
17 DataSet ds = new DataSet();
18 DataTable dt = ds.Tables.Add("table");
19
20 dt.Columns.Add("City", typeof(object));
21 dt.Columns.Add("Data", typeof(object));
22
23 Random rd = new Random();
24 for (int i = 0; i < list.Count; i++)
25 {
26 DataRow dr = dt.NewRow();
27 dr["City"] = list[i];
28 dr["Data"] = rd.Next(10000, 99999);
29 dt.Rows.Add(dr);
30 }
31 return ds.GetXml();
32 }
33 }
注意:默認的情況下Datatable是不能被序列化的,而Dataset可以,而且Siverlight中不支持Dataset,因為不包含System.Data的命名空間,這里我們返回的是XML類型的數據。
下面我們要在SiverLight項目中添加Webservice的引用。
創建Chart
OK,別忘記添加SLVisifire.Charts.dll的引用。
Siverlight前臺的代碼沒什么講頭,自己看吧,我先貼上來。
1 <UserControl xmlns:my1="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" xmlns:my="clr-namespace:Visifire.Charts;assembly=SLVisifire.Charts" x:Class="SilverlightApp.MainPage"
2 xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="//schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="//schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="//schemas.openxmlformats.org/markup-compatibility/2006"
6 mc:Ignorable="d"
7 d:DesignHeight="500" d:DesignWidth="500">
8 <UserControl.Resources>
9 <Style x:Key="ChartStyle" TargetType="my:Chart">
10 <Setter Property="Background">
11 <Setter.Value>
12 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
13 <GradientStop Color="Gray" Offset="0"/>
14 <GradientStop Color="White" Offset=".5"/>
15 <GradientStop Color="#FFB2ADAD" Offset="1"/>
16 </LinearGradientBrush>
17 </Setter.Value>
18 </Setter>
19 <Setter Property="Padding" Value="10"/>
20 </Style>
21 <Style x:Key="TitleStyle" TargetType="my:Title">
22 <Setter Property="FontSize" Value="18"/>
23 <Setter Property="FontColor" Value="LightGray"/>
24 </Style>
25 </UserControl.Resources>
26 <Grid x:Name="LayoutRoot" Background="Black">
27 <Grid.RowDefinitions>
28 <RowDefinition Height="25"/>
29 <RowDefinition Height="300"/>
30 </Grid.RowDefinitions>
31 <StackPanel Grid.Row="0" Orientation="Horizontal">
32 <Button Content="柱狀圖" Height="23" Name="button1" Width="75" Click="button1_Click" />
33 <Button Content="餅圖" Height="23" Width="75" Click="Button_Click" />
34 <Button Content="曲線圖" Height="23" Name="button2" Width="75" Click="button2_Click" />
35 <Button Content="StackedBar" Height="23" Name="button3" Width="75" Click="button3_Click" />
36 <Button Content="SectionFunnel" Height="23" Name="button4" Width="107" Click="button4_Click" />
37 </StackPanel>
38 <my:Chart Name="chartTest" Grid.Row="1" Theme="Theme1" Style="{StaticResource ChartStyle}" Width="450" Height="300" HorizontalAlignment="Left">
39 <my:Chart.Titles>
40 <my:Title Text="Visifire Sample with Styling" Style="{StaticResource TitleStyle}"/>
41 </my:Chart.Titles>
42 </my:Chart>
43 </Grid>
44 </UserControl>
后臺代碼:
public partial class MainPage : UserControl
{
private List<DataClass> listData = new List<DataClass>();
public MainPage()
{
InitializeComponent();
getData();
}
void getData()
{
SilverlightApp.ServiceData.myServiceSoapClient service = new ServiceData.myServiceSoapClient();
service.mapDataAsync();
service.mapDataCompleted += new EventHandler<ServiceData.mapDataCompletedEventArgs>(service_mapDataCompleted);
}
//圖表
public void ChartInit(RenderAs ra)
{
DataSeries dataseries = new DataSeries();
//圖表樣式
dataseries.RenderAs = ra;
DataPoint dp;
for (int i = 0; i < listData.Count(); i++)
{
dp = new DataPoint();
dp.YValue = listData[i].Data;
dp.AxisXLabel = listData[i].City;
dataseries.DataPoints.Add(dp);
}
chartTest.View3D = true;
chartTest.Series.Add(dataseries);
}
void service_mapDataCompleted(object sender, SilverlightApp.ServiceData.mapDataCompletedEventArgs e)
{
if (e.Error == null)
{
displayData(e.Result.ToString(), RenderAs.StackedColumn);
}
else
{
System.Windows.Browser.HtmlPage.Window.Alert(" Faile!");
}
}
private void displayData(string xmlContent,RenderAs ra)
{
try
{
if (xmlContent != string.Empty)
{
XElement xmldoc = XElement.Parse(xmlContent);
var query = from q in xmldoc.Descendants("table")
select new
{
Data = Convert.ToInt32
(q.Element("Data").Value),
City = (string)
q.Element("City").Value
};
foreach (var q in query)
{
DataClass model = new DataClass();
model.City = q.City;
model.Data = q.Data;
listData.Add(model);
}
}
ChartInit(ra);
}
catch(Exception ex)
{
throw ex;
}
}
//Data Entity
public class DataClass
{
public string City { get; set; }
public int Data { get; set; }
}
}
效果展示
代碼都貼完了,上面的代碼嘛也都是基本的東西,童鞋們有興趣的自己看看吧,李會軍前輩的博客(//www.cnblogs.com/Terrylee/)有詳細的說明,感興趣的童鞋們可以去看看吧,我嘛就不講了,下面上圖。
1:柱狀圖
2:曲線圖
3:StackedBar
4:餅圖
5:Doughnut
6:Bubble
7:SectionFunnel
8:StackedArea
綜述
效果圖就貼這些吧,這些只是比較常用的一部分而已,當然如果覺得樣式不好,可以更改的,只是可惜的是Visifire現在已經收費了,不過畢竟曾經Open Source過。這個版本還是可以正常使用的,但是右上角的水印去不掉的,Watermark屬性提示已經過期了,不過喜歡的朋友們仍然可以使用好了,水印只不過是一個鏈接而已嘛。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載