Диаграмма из нескольких таблиц - PullRequest
0 голосов
/ 13 февраля 2019

enter image description here У меня есть три таблицы с именами Deposit, Debit и Transfer, например

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

Как я могу показать все три таблицы на одном графике?Мне даже интересно, лучше ли вместо этого поместить эти три таблицы в одну таблицу, например

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";  

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете просто выбрать данные из каждой из таблиц, а затем использовать метод 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);

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...