1

我正在构建一个程序,该程序允许我通过从一组旅行中选择数据来提取数据,并将所有找到的项目作为该旅行的一部分填充到列表框中。当我从列表框中选择一个项目时,我希望它填充一系列允许我编辑每个字段的文本框。

这是我的问题代码在表单中的位置(tripChoose 是组合框,listExpenses 是列表框):

private void tripChoose_SelectedIndexChanged(object sender, EventArgs e)
{
    IEnumerable<TripExpense> selectedExpenses = roster.ToFind((string)tripChoose.SelectedItem);
    foreach (TripExpense item in selectedExpenses)
        listExpenses.Items.Add(item);
}

private void listExpenses_SelectedIndexChanged(object sender, EventArgs e)
{
    specificExpenses = (TripExpense)roster.TripFind((string)listExpenses.SelectedItem);
    tripTextBox.Text = specificExpenses.Trip;
    tripTextBox.Enabled = false;
    descriptionTextBox.Text = specificExpenses.Description;
    amountTextBox.Text = specificExpenses.Amount.ToString();
    paymentMethodTextBox.Text = specificExpenses.PaymentMethod;
    dateExpenseTimePicker.Value = specificExpenses.Date;
    dateExpenseTimePicker.Enabled = true;
    noteTextBox.Text = specificExpenses.Note;
}

JIT 调试器让我知道我将对象隐式转换为字符串

我试过使用这样的 ToString 方法:

private void tripChoose_SelectedIndexChanged(object sender, EventArgs e)
{
    IEnumerable<TripExpense> selectedExpenses = roster.ToFind((string)tripChoose.SelectedItem);
    foreach (TripExpense item in selectedExpenses)
    listExpenses.Items.Add(item.ToString());
}

我认为我在正确的轨道上,因为我收到一个错误,告诉我对象引用未设置为对象的实例。

4

1 回答 1

1

我相信问题是ToString()TripExpense. 当您使用其中的字符串并将其输入时,FindTrip它再也找不到它了。

您可以做的是拥有组合项目的原始设置并SelectedIndexChanged修改

private void tripChoose_SelectedIndexChanged(object sender, EventArgs e)
{
    IEnumerable<TripExpense> selectedExpenses = roster.ToFind((string)tripChoose.SelectedItem);
    foreach (TripExpense item in selectedExpenses)
        listExpenses.Items.Add(item);
}

private void listExpenses_SelectedIndexChanged(object sender, EventArgs e)
{
    specificExpenses = (TripExpense)listExpenses.SelectedItem;
    ... 
}

这样,ComboBox 文本仍将获取对象的ToString()TripExpense但您仍然可以从 中获取实际对象SelectedItem以进行使用,而不是尝试重新查询该对象。

于 2012-04-24T03:09:55.890 回答