C# 将记录从列表传递到组合框,然后解析其中的一部分以向方法返回值

C# 将记录从列表传递到组合框,然后解析其中的一部分以向方法返回值,c#,winforms,linq,C#,Winforms,Linq,这里有三个要素 一系列方法的旅行费用清单 windows窗体(tripChoose是一个组合框,listExpenses是一个列表框) 对象本身(旅行费用) 我只想通过e.Trip的“ToFind”方法。而是传递整个字符串。我只需要解析出e.Trip。有什么想法吗?我仍然希望金额和行程都显示在组合框中,但我只需要e.trip就可以传递到该方法。见下文: 在表格中,我有这个 private void LoadExpenseListSums() { expenseTotalSelect.It

这里有三个要素

  • 一系列方法的旅行费用清单
  • windows窗体(tripChoose是一个组合框,listExpenses是一个列表框)
  • 对象本身(旅行费用)
  • 我只想通过e.Trip的“ToFind”方法。而是传递整个字符串。我只需要解析出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);            
    }
    
    如果将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);
            }
    

    我看到你在这样做:

    foreach (var e in dateSorted) 
        tripChoose.Items.Add(string.Format("{0} | ${1}", e.Trip, e.SumAmount));
    
    然后,您要完成以下任务:

    roster.ToFind((string)tripChoose.SelectedItem);
    
    但是,当你完成了寻找的事情,你想它只需要e.旅行,而不是e.数量

    现在,假设我写的是你想要的东西,你可以做简单的事情

    首先,让舒尔确保
    string.Format(“{0}|${1}”,e.Trip,e.sumamunit)
    是按您在这里看到的格式编写的。然后您可以删除tripChoose中不需要的部分。根据格式化的|字符选择EdItem。作为一个想法,您可以使用一个

    string myItem = (string)tripChoose.SelectedItem;
    int removingIndex;
    for (int i = 0; i < myItem.Length; i++)
    {
        if (myItem[i] == '|')
        {
            removingIndex = i;
            i = myItem.Length;
        }
    }
    myItem.Remove(removingIndex);
    
    string myItem=(string)tripChoose.SelectedItem;
    删除索引;
    for(int i=0;i
    这是最好的方式吗。。。?不,但这是最基本的想法

    现在,您可以将
    花名册.ToFind
    与只有e.Trip部分的
    myItem
    字符串一起使用


    希望这能有所帮助,我想采取一些不同的方法来做这件事

    声明一个临时类

     public class tempTrip
      {
           public string Trip;
           public string dispText { get; set;} 
      }
    
    现在更改loadExpenseSistSums()函数

    private void LoadExpenseListSums()
    {ExpenseToalSelect.Items.Clear();
    var dateSorted=
    来自名册中的e
    e组乘e组,进入tripGroup
    选择新的标签
    {Trip=tripGroup.Key,dispText=string.Format(“{0}|${1}”,tripGroup.Key,tripGroup.Sum(e=>e.Amount)).Tostring();
    tripChoose.DisplayMember=“dispText”;
    tripChoose.DataSource=dateSorted.ToList();
    } 
    
    现在在tripChoose\u SelectedIndexChanged中,您可以编写

     IEnumerable<TripExpense> selectedExpenses = roster.ToFind(((tempTrip)tripChoose.SelectedItem).Trip); 
     // this will give you Trip from the selected item.
    
    IEnumerable selectedExpenses=花名册.ToFind(((testrip)tripChoose.SelectedItem.Trip);
    //这将使您从所选项目开始旅行。
    
    我迷路了,你有什么问题吗?你不能基于
    |
    进行拆分并获取值吗?谢谢,我正在我的行程选择下拉列表中显示此值:Payroll.ExpenseRecordPerform+诱惑rip我只需要获取格式化字符串,以在class a属性中显示Make dispText。它会起作用的。查看更改后的代码。
     private void LoadExpenseListSums() 
     {     expenseTotalSelect.Items.Clear();     
            var dateSorted =         
                         from e in roster        
                         group e by e.Trip into tripGroup         
                          select new  tempTrip 
                           { Trip = tripGroup.Key, dispText = string.Format("{0} | ${1}",  tripGroup.Key, tripGroup.Sum(e => e.Amount)).Tostring() };     
    
              tripChoose.DisplayMember =  "dispText";
              tripChoose.DataSource = dateSorted.ToList<tempTrip>();       
    } 
    
     IEnumerable<TripExpense> selectedExpenses = roster.ToFind(((tempTrip)tripChoose.SelectedItem).Trip); 
     // this will give you Trip from the selected item.