C# 图表未正确显示数据

C# 图表未正确显示数据,c#,database,charts,series,C#,Database,Charts,Series,我对MS图表控制有一个非常奇怪的问题。我想做的是,随着时间的推移显示几个数据值,但我得到了一些非常奇怪的结果 例如:我有一个数据库(Access),其中包含如下表: 用户(ID、名称等) 收据(ID、收据编号、金额、收据日期、收件人ID、用户ID) 收件人(ID、收件人姓名) 我想显示(最好是在折线图上)每个收件人的花费金额(即:收件人可能像SevenEleven、Elector、McDonald's等),因此X轴代表收据的“日期”部分,Y轴代表值(金额),A轴显然代表收件人。那么,如果有6

我对MS图表控制有一个非常奇怪的问题。我想做的是,随着时间的推移显示几个数据值,但我得到了一些非常奇怪的结果

例如:我有一个数据库(Access),其中包含如下表:

  • 用户(ID、名称等)
  • 收据(ID、收据编号、金额、收据日期、收件人ID、用户ID)
  • 收件人(ID、收件人姓名)
我想显示(最好是在折线图上)每个收件人的花费金额(即:收件人可能像SevenEleven、Elector、McDonald's等),因此X轴代表收据的“日期”部分,Y轴代表值(金额),A轴显然代表收件人。那么,如果有60张.ex的收据。七位不同的接受者和他们各自的日期,我该怎么办

我尝试过用这个SQL将数据拉入datatable

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;