我有一个我想在饼图中显示的数据表。Amount
将是值和MsgType
lable。该图应有3个切片。桌子看起来像这样:
MsgType Amount
-----------------
3 4500
2 1262
1 3956
我遵循了一些示例,在我的应用程序中创建了一个新的馅饼系列和节目。代码范围如下:
public SeriesCollection MsgTypeDoughnut { get; set; }
public List<int> Lables { get; set; }
public MsgTypeProportion()
{
InitializeComponent();
List<DataMsgType> dataMsgTypes = GetMsgType();
ChartValues<int> values = new ChartValues<int>();
Lables = new List<int>();
foreach (var item in dataMsgTypes)
{
values.Add(item.Amount);
Lables.Add(item.MsgType);
}
MsgTypeDoughnut = new SeriesCollection
{
new PieSeries
{
Title = "Amount",
Values = values,
DataLabels = true
}
};
DataContext = this;
}
public List<DataMsgType> GetMsgType()
{
DataSet DS = new DataSet();
DataSetTableAdapters.spMessages_GetMsgTypeOverviewTableAdapter MsgTypeta = new DataSetTableAdapters.spMessages_GetMsgTypeOverviewTableAdapter();
MsgTypeta.Fill(DS.spMessages_GetMsgTypeOverview);
List<DataMsgType> dataMsgTypes = new List<DataMsgType>();
foreach (DataRow row in DS.Tables["spMessages_GetMsgTypeOverview"].Rows)
{
dataMsgTypes.Add(new DataMsgType() { MsgType = (int)row["MsgType"], Amount = (int)row["Amount"]});
}
return dataMsgTypes;
}
,但这在1 piechart中创建了3个新的piecharts,而不是3个切片。我发现了这个问题如何使用livecharts,解决方案是要有多个PieSeries
,但我不知道如何使用我的表中的行。
我找到了答案,而不是这样做:
foreach (var item in dataMsgTypes)
{
values.Add(item.Amount);
Lables.Add(item.MsgType);
}
MsgTypeDoughnut = new SeriesCollection
{
new PieSeries
{
Title = "Amount",
Values = values,
DataLabels = true
}
};
我必须做:
MsgTypeDoughnut = new SeriesCollection();
foreach (var item in dataMsgTypes)
{
MsgTypeDoughnut.Add(new PieSeries
{
Title = "test",
Values = new ChartValues<ObservableValue> { new ObservableValue(item.Amount) },
DataLabels = true,
Stroke = System.Windows.Media.Brushes.Transparent
});
Lables.Add("MsgType " + (item.MsgType));
}
这样,我的表行中的数据将作为新切片而不是新饼图添加到piechart。