目标是仅显示已创建的每个银行帐户的最新更新。我不知道如何执行此操作,并尝试使用clear方法,但这不起作用。当前,每次我单击报告按钮时,我每次添加一个支票或储蓄帐户,如果我进行了提现或存款,它将多次显示该帐户。我的目标是仅显示每个存在的帐户,而当前余额不会多次显示该帐户,因为我进行了多次交易。从下面的屏幕快照中可以看到,我创建了一个初始余额为$ 300的Checking帐户#1。然后,我进行另一笔交易,向支票帐户添加1000美元,并创建一个初始余额为300美元的储蓄帐户。当我再次单击“报告”时,它应仅显示余额为1300美元的支票帐户和余额为300美元的储蓄帐户。相反,它显示具有新交易的先前交易。
这是将数据发送到报表的代码。
private void reportButton4_Click(object sender, EventArgs e)
{
foreach (Account account in accounts)
{
List<Transaction> transactions =
account.GetAccountTransaction();
allTransactions.AddRange(transactions);
}
string reportString = accounts.ToString();
AccountReportForm destinyForm = new AccountReportForm();
destinyForm.ExternalData = allTransactions;
destinyForm.Show();
}
这是报告表单中显示结果的代码。
public partial class AccountReportForm : Form
{
public List<Transaction> ExternalData { get; set; }
public AccountReportForm()
{
InitializeComponent();
}
private void AccountReportForm_Load(object sender, EventArgs e)
{
dataLabel2.Text = "";
foreach (Transaction endMonth in ExternalData)
{
dataLabel2.Text += endMonth.Transactions + "\n";
}
}
如果需要,这是在reportbutton方法单击中调用的方法。此方法在储蓄和支票类中。
public override List<Transaction> GetAccountTransaction()
{
var transactions = new List<Transaction>();
var endString = new Transaction();
string reportString = ("Checking account: " +
AccountID.ToString() + " has a balance of $" + Balance.ToString());
endString.Transactions = reportString;
transactions.Add(endString);
return transactions;
}
答案 0 :(得分:1)
似乎您在reportButton4_Click
中使用的是名为allTransactions
的变量,该变量未在该方法中定义。由于您要在该列表上调用.AddRange()
,因此每次单击按钮时,它将把帐户中的交易追加到当前列表中。如果您从不重置列表,它将不断增长。尝试先重置列表:
private void reportButton4_Click(object sender, EventArgs e)
{
allTransactions = new List<Transaction>();
foreach (Account account in accounts)
{
List<Transaction> transactions =
account.GetAccountTransaction();
allTransactions.AddRange(transactions);
}
string reportString = accounts.ToString();
AccountReportForm destinyForm = new AccountReportForm();
destinyForm.ExternalData = allTransactions;
destinyForm.Show();
}