ここには 3 つの要素があります。
- たくさんのメソッドを含む旅費のリスト
- Windows フォーム (tripChoose はコンボ ボックス、listExpenses はリスト ボックス)
- 物自体(旅費)
「ToFind」メソッドに e.Trip だけを渡したい。代わりに、文字列全体が渡されます。どうにかして e.Trip だけを解析する必要があります。何か案は?金額とトリップの両方をコンボ ボックスに表示したいのですが、メソッドに渡す必要があるのは e.Trip だけです。下記参照:
フォームでは、私はこれを持っています
private void LoadExpenseListSums()
{
expenseTotalSelect.Items.Clear();
var dateSorted =
from e in roster
group e by e.Trip into tripGroup
select new { Trip = tripGroup.Key, SumAmount = tripGroup.Sum(e => e.Amount) };
foreach (var e in dateSorted)
tripChoose.Items.Add(string.Format("{0} | ${1}", e.Trip, e.SumAmount));
}
private void tripChoose_SelectedIndexChanged(object sender, EventArgs e)
{
listExpenses.Items.Clear();
tripTextBox.Clear();
descriptionTextBox.Clear();
amountTextBox.Clear();
paymentMethodTextBox.Clear();
noteTextBox.Clear();
IEnumerable<TripExpense> selectedExpenses = roster.ToFind((string)tripChoose.SelectedItem);
foreach (TripExpense item in selectedExpenses)
listExpenses.Items.Add(item);
}
LoaExpenseListSums は、フォームが読み込まれるときに発生します。e.Trip だけroster.ToFind((string)tripChoose.SelectedItem);
をこのメソッドに渡す必要があります。
public IEnumerable<TripExpense> ToFind(string trip)
{
return this.Where(e => e.Trip == trip);
}
LoadExpenseListSums を次のように書き直せば問題なく動作します。
private void LoadExpenseListSums()
{
expenseTotalSelect.Items.Clear();
var dateSorted =
from e in roster
group e by e.Trip into tripGroup
select new { Trip = tripGroup.Key };
foreach (var e in dateSorted)
tripChoose.Items.Add(e.Trip);
}