C# 图表未正确显示数据
我对MS图表控制有一个非常奇怪的问题。我想做的是,随着时间的推移显示几个数据值,但我得到了一些非常奇怪的结果 例如:我有一个数据库(Access),其中包含如下表:C# 图表未正确显示数据,c#,database,charts,series,C#,Database,Charts,Series,我对MS图表控制有一个非常奇怪的问题。我想做的是,随着时间的推移显示几个数据值,但我得到了一些非常奇怪的结果 例如:我有一个数据库(Access),其中包含如下表: 用户(ID、名称等) 收据(ID、收据编号、金额、收据日期、收件人ID、用户ID) 收件人(ID、收件人姓名) 我想显示(最好是在折线图上)每个收件人的花费金额(即:收件人可能像SevenEleven、Elector、McDonald's等),因此X轴代表收据的“日期”部分,Y轴代表值(金额),A轴显然代表收件人。那么,如果有6
- 用户(ID、名称等)
- 收据(ID、收据编号、金额、收据日期、收件人ID、用户ID)
- 收件人(ID、收件人姓名)
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;
但一切都搞砸了。。。然后我尝试通过datatable循环并为每个接收者创建新的序列-没有用
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);
它的代码部分
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;
XValueMember=“DateOf”
类型是DateTime吗?你真的想要7行不同颜色的收件人吗?数据表看起来怎么样?好吗?没错!它是DateTime类型。实际上,我想要的是,每一行代表一个收件人(即供应商)。如果我将同一个DataTable连接到DataGridView,则输出看起来也不正确。所以我认为问题在于我的SQL查询。。。我尝试了1001个不同的查询(手工查询、MS Access查询等等),但都没有用。每次都出了问题。我甚至在Access本身(使用查询生成器和图表报告)中测试了这个该死的东西,你瞧:它工作起来像个符咒!所以我去把SQL字符串复制到我的代码中——不行!只是不起作用…关于那七种颜色。。。也许我真的不明白,char控件最初是如何工作的,但是我想象我必须为每个接收者创建单独的序列。。。我不知道。。。如果您可以想象这样的场景:我们有10个供应商,每个供应商都连接到不同数量的发票。每张发票都有自己的日期和金额。因此,我想显示(在一个图表区域中)代表一段时间内每个金额的行(例如:Sup1在3个月内有10张发票,Sup2有6张发票,依此类推),因此每个点都是代表供应商的发票金额(通过行连接)。每个收件人有一个系列的想法很好,只要数量不太多。-真正的问题当然是数据。是的。。。!多谢!我想我会试一试,重新考虑一下。甚至可能重新评估我的数据库模式和概念。。。再次感谢!再见!
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;