我对MS Chart控件有一个非常奇怪的问题。我想要做的是随时间显示几个数据值,但是我得到了一些非常奇怪的结果...
例如:我有一个数据库(Access),其中包含如下表:
我想显示(最好在线形图上)每个接收者的支出金额(即:接收者就像SevenEleven,Elector,McDonald's等),因此X轴代表收据的“日期”部分,Y轴将是值(金额),而LINE显然将代表接收者。因此,如果有60张ex.ex收据。七个不同的收件人,以及他们的约会日期,我该如何处理?
我尝试使用此SQL将数据拉入数据表
SELECT
Recipients.Recipient, SUM(Receipts.Amount) AS Skupaj, DateOf
FROM
Receipts
LEFT JOIN
Recipients ON Recipients.ID = Receipts.Recipient
WHERE
Receipts.Recipient = 1
GROUP BY
Recipients.Recipient, Receipts.Amount;
但是一切都搞砸了...然后我尝试遍历数据表并为每个收件人创建新系列-无济于事
Series series;
string legendData = "";
for (int i = 0; i < datatable.Rows.Count; i++)
{
// get data for legend
legendData = datatable.Rows [i].Field<string>(0) + ": " + datatable.Rows [i].Field<decimal>(1).ToString();
series = new Series
{
// set legend value
LegendText = legendData, //datatable.Rows [i].Field<string>(0) + " " + datatable.Rows [i].Field<decimal>(2).ToString(),
// set X axis data
XValueMember = "DateOf",
// set Y axis data
YValueMembers = "Skupaj",
// set chart type
ChartType = SeriesChartType.Line,
// set a bit of colors for data charting
Palette = ChartColorPalette.Excel,
// is the value of data printed on chart line
IsValueShownAsLabel = false,
// is data visible in the legend
IsVisibleInLegend = true,
};
chartData.Series.Add(series);
但无济于事...
此外,收件人的姓名也应出现在图例中,但没有出现,因此我不得不手动添加它。因此这行:
legendData = datatable.Rows [i].Field<string>(0) + ": " + datatable.Rows [i].Field<decimal>(1).ToString();
图表中显示的数据太混乱了,看起来像是毕加索制作的……
我想我做错了什么,甚至是从错误的角度看待了整个事情……
有人知道我在做什么错吗,或者(甚至更好!)为我提供一个样本(我敢肯定还有其他人)来看看并为我自己尝试一下?
致以最良好的祝愿! #stayHome和#beHealthy
开机自检新数据:
注意图表上方突出显示的数据-应该进行汇总。还要注意X轴-它是每月间隔的...
这是此系列数据的实际SQL字符串:
public static string TEST_BY_PREJEMNIKI =
"SELECT DISTINCT Recipients.Recipient, " +
"SUM(Receipts.Amount) AS Amount, Receipts.DateOf " +
"FROM Receipts LEFT JOIN Recipients ON Recipients.ID = " +
"Receipts.Recipient GROUP BY Recipients.Recipient, Receipts.Amount, Receipts.DateOf ORDER BY Receipts.DateOf;";
还有其中的代码部分...
adapter.Fill(datatable);
chartData.DataSource = datatable;
connection.Close();
#endregion DATABASE STUFF
#region PLOTTING CHART DATA
chartData.Series [0].XValueMember = "DateOf";
chartData.Series [0].YValueMembers = "Amount";
chartData.Series [0].IsVisibleInLegend = true;
chartData.Series [0].ChartType = SeriesChartType.Spline;
chartData.Series [0].Palette = ChartColorPalette.BrightPastel;