C# 来自多个表的图表

C# 来自多个表的图表,c#,winforms,charts,C#,Winforms,Charts,我有三张表,分别是存款、借记和转账, 像 如何在一个图表中显示所有三个表?我甚至想知道把这三张桌子放在一张桌子上是否更好,比如 Transaction {TransactionId, TransactionTypeId, TransactionDate, Amount} 其中,TransactiontypeId可以是1=存款,2=借记,3=转账,并将此交易表绑定到图表。 假设我将所有这些都放在一个表中,使用表名事务,然后@mm8帮助我解决了这个问题: var result = (from

我有三张表,分别是存款、借记和转账, 像

如何在一个图表中显示所有三个表?我甚至想知道把这三张桌子放在一张桌子上是否更好,比如

Transaction {TransactionId, TransactionTypeId, TransactionDate, Amount} 
其中,TransactiontypeId可以是1=存款,2=借记,3=转账,并将此交易表绑定到图表。 假设我将所有这些都放在一个表中,使用表名事务,然后@mm8帮助我解决了这个问题:

 var result = (from pr in db.Transactions 
                  join tr in db.TransactionType on pr.TrTypeId equals tr.TransactionTypeId
                  select new
                  {
                      TransactionDate = pr.TransactionDate,
                      TransactionType = tr.TrType,
                      Amount = pr.Amount

                  }).ToList();

chart1.DataSource = result
 .GroupBy(x => x.TransactionDate.Value.Year)
    .Select(g => new
    {
        Year = g.Key,
        TransactionType = g. //////
        Amount = g.Sum(y => y.Amount)
    })
    .ToArray();
最好从一个表或多个表中获得一个图表,以及如何执行多个操作

我知道我必须为每个表创建不同的系列,如下所示:

var Depseries = chart1.Series.Add("Deposit");
Depseries.XValueMember = "Year";
Depseries.YValueMembers = "DepositAmount";
Depseries.Name = "Deposit";
chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
chart1.Series["Deposit"].IsValueShownAsLabel = true;
Depseries.CustomProperties = "LabelStyle=Left";

// Debit

var Debseries = chart1.Series.Add("Debit");
Debseries.XValueMember = "Year";
Debseries.YValueMembers = "DebitAmount";
Debseries.Name = "Debit";
chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
chart1.Series["Debit"].IsValueShownAsLabel = true;
Debseries.CustomProperties = "LabelStyle=Left";

// Transfer
var FDseries = chart1.Series.Add("Transfer");
FDseries.XValueMember = "Year";
FDseries.YValueMembers = "TransferAmount";
FDseries.Name = "Transfer";
chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
chart1.Series["Transfer"].IsValueShownAsLabel = true;
FDseries.CustomProperties = "LabelStyle=Left";  

您可以从每个表中选择数据,然后使用
DataBind
方法用数据填充序列,例如:

var deposits = (from x in db.Deposits select new { x.DepositDate, x.Amount })
    .ToArray()
    .GroupBy(x => x.DepositDate.Year)
    .Select(g => new { Year = g.Key, Amount = g.Sum(y => y.Amount) })
    .ToArray();
var Depseries = chart1.Series.Add("Deposit");
Depseries.XValueMember = "Year";
Depseries.YValueMembers = "DepositAmount";
Depseries.Name = "Deposit";
chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
chart1.Series["Deposit"].IsValueShownAsLabel = true;
Depseries.CustomProperties = "LabelStyle=Left";
chart1.Series["Deposit"].Points.DataBind(deposits, "Year", "Amount", null);

var debits = (from x in db.Debits select new { x.DebitDate, x.Amount })
    .ToArray()
    .GroupBy(x => x.DebitDate.Year)
    .Select(g => new { Year = g.Key, Amount = g.Sum(y => y.Amount) })
    .ToArray();
var Debseries = chart1.Series.Add("Debit");
Debseries.XValueMember = "Year";
Debseries.YValueMembers = "DebitAmount";
Debseries.Name = "Debit";
chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
chart1.Series["Debit"].IsValueShownAsLabel = true;
Debseries.CustomProperties = "LabelStyle=Left";
chart1.Series["Debit"].Points.DataBind(debits, "Year", "Amount", null);

...

下载msdn示例。很多很好的例子:就目前而言,这个问题既不清楚,又基于观点。@TaW谢谢你,TaW,我理解你。即使对我来说,我的问题也很难表述;)假设我有3张表,如我在开始存款表、借记表和转账表中所写,每一张表都有日期和金额。我怎样才能在同一张图表中显示它们呢?在我看来,你一开始还不错。关键是要知道结果应该是什么样子。它们有共同的x轴吗?也许是今年吧?然后你就可以做你写的:将每个结果集绑定到不同的系列。@TaW yes Year是公共x轴。我可以问问你吗。。请写下你的代码,我对这个工作人员来说太陌生了,很困惑。我尝试了不同的方法,但没有看到结果。我真的很感谢你的帮助。太好了!它起作用了。我对点一无所知。数据绑定。哇。。。非常感谢你!我想是的,但我忘了做哪一个呢?我明白了。。你知道我是业余爱好者;)
var deposits = (from x in db.Deposits select new { x.DepositDate, x.Amount })
    .ToArray()
    .GroupBy(x => x.DepositDate.Year)
    .Select(g => new { Year = g.Key, Amount = g.Sum(y => y.Amount) })
    .ToArray();
var Depseries = chart1.Series.Add("Deposit");
Depseries.XValueMember = "Year";
Depseries.YValueMembers = "DepositAmount";
Depseries.Name = "Deposit";
chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
chart1.Series["Deposit"].IsValueShownAsLabel = true;
Depseries.CustomProperties = "LabelStyle=Left";
chart1.Series["Deposit"].Points.DataBind(deposits, "Year", "Amount", null);

var debits = (from x in db.Debits select new { x.DebitDate, x.Amount })
    .ToArray()
    .GroupBy(x => x.DebitDate.Year)
    .Select(g => new { Year = g.Key, Amount = g.Sum(y => y.Amount) })
    .ToArray();
var Debseries = chart1.Series.Add("Debit");
Debseries.XValueMember = "Year";
Debseries.YValueMembers = "DebitAmount";
Debseries.Name = "Debit";
chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
chart1.Series["Debit"].IsValueShownAsLabel = true;
Debseries.CustomProperties = "LabelStyle=Left";
chart1.Series["Debit"].Points.DataBind(debits, "Year", "Amount", null);

...