【问题标题】:Chart from multiple tables来自多个表格的图表
【发布时间】:2019-02-13 12:16:34
【问题描述】:

我有三个名为存款、借记和转账的表, 喜欢

Deposit  { DepositID, DepostDate, Amount}
Debit    { DebitID, DebitDate, Amount}
Transfer { TransferID, TransferDate, Amount}

如何在一张图表中显示所有三个表格?我什至想知道将这三个表放在一个表中是否更好,例如

Transaction {TransactionId, TransactionTypeId, TransactionDate, Amount} 

其中 TransactiontypeId 可以是 1 = 存款,2 代表借方,3 代表转账,并将此交易表绑定到图表。 假设我将所有这些都放在一个表中,并使用表名 Transactions 然后@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";  

【问题讨论】:

  • 下载 msdn 示例。很多很好的例子:code.msdn.microsoft.com/windowsapps/…
  • 就目前而言,这个问题既不清楚又基于意见。
  • @TaW 谢谢 Taw,我理解你。即使对我来说,也很难提出我的问题 ;) 假设我有 3 个表,正如我在开始的存款表、借记表和转账表中所写的那样每个都有日期和金额。如何在同一个图表中显示它们?
  • 你已经开始很好了,imo。关键是要知道结果应该是什么样子。它们有共同的 x 轴吗?可能是年?然后你可以做你写的:将每个结果集绑定到不同的系列..
  • @TaW yes 年份是常见的 x 轴。我可以问你.. 请写下你的代码我对这个员工很陌生,很困惑。我尝试了不同的方法,但我没有看到结果。我真的很感谢你的帮助。

标签: c# winforms charts


【解决方案1】:

您可以只从每个表中选择数据,然后使用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);

...

【讨论】:

  • 太棒了!它正在工作。我对 Points.DataBind 一无所知。哇...非常感谢!
  • 我以为我做了,但我忘了做哪一个?
  • 我明白了.. 你知道我是业余爱好者 ;)
猜你喜欢
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多