2011-07-27 4 views
1

버튼 클릭 이벤트에서 텍스트 상자로 채울 observablecollection이 있습니다. 내 프로젝트에서 하나의 클래스 목록입니다 >> public List _RoomNumber = new List(); 나는 observablecollection 값을 _RoomNumber리스트로 보내고 싶다. 예를 들어, observablecollection이이 4 가지 값을 가지고 있다면 : 15, 20, 2323, 3232 _RoomNumber 컨텍스트가 같아야합니다. 15, 20, 2323, 3232WPF C#. observablecollection을 List에 넣습니다.

제 질문에 대한 답변을 드리겠습니다. 이 내 ObservableCollection에가 :

ObservableCollection<CheckInData> _CheckInCollection = new ObservableCollection<CheckInData>(); 

    public ObservableCollection<CheckInData> CheckInCollection 
    { 
     get { return _CheckInCollection; } 
    } 
    public class CheckInData 
    { 
     public string RoomNumber { get; set; } 
     public decimal Price { get; set; } 
     public string Currecny { get; set; } 
     public decimal Discount { get; set; } 
     public string CheckOut { get; set; } 
     public int TotalDay { get; set; } 
     public decimal TotalPrice { get; set; } 
     public int CheckOutYear { get; set; } 
     public int CheckOutMonth { get; set; } 
     public int CheckOutDay { get; set; } 
     public Boolean IncToday { get; set; } 
    } 

이 메신저 목록을 넣어하려고 방법이다. 문제는 observablecollection이 102와 305를 포함한다는 것입니다. _RoomNumber는 값 '1'만 가져옵니다. , 기존 List 인스턴스를 다시 사용하려는 경우가

var roomnumbers = CheckInCollection.Select(x => x.RoomNumber); 
inv._RoomNumber = new List(roomnumbers); 

를 사용하거나 할 수

inv._RoomNumber.Clear(); 
inv._RoomNumber.AddRange(roomnumbers); 

private void btnPrintInvoice_Click(object sender, RoutedEventArgs e) 
     { 
      //This is Class where my List _RoomNumber is 
      DataToExcel.Invoice inv = new DataToExcel.Invoice(); 
      foreach (CheckInData coll in CheckInCollection) 
      { 
       for (int i = 0; i < _CheckInCollection.Count; i++) 
       { 
        inv._RoomNumber.Add(coll.RoomNumber[i].ToString()); 
       } 
      } 
     } 
+0

클릭 이벤트에서 무엇을하려고하는지 이해할 수 없습니다. 왜 같은 컬렉션에 두 반복이 필요합니까? 내가 아는 한 CheckInCollection에서 모든 roomnumbers를 List .. right ..로 가져와야한다는 것을 이해합니다. – Bathineni

답변

1

:-) 같은 컬렉션을 반복하는 것이

주 당신은 작은 수정을해야합니다. 이것을 시도하십시오 :

private void btnPrintInvoice_Click(object sender, RoutedEventArgs e) 
{ 
     //This is Class where my List _RoomNumber is 
     DataToExcel.Invoice inv = new DataToExcel.Invoice(); 
     foreach (CheckInData coll in CheckInCollection) 
     {     
      inv._RoomNumber.Add(coll.RoomNumber.ToString());     
     } 
} 

색인으로 RoomNumber에 액세스 할 필요가 없습니다. 컬렉션이 아닙니다.

+0

실제로'RoomNumber'는 이미'string'입니다 – Vlad

+0

인덱스가 없으면 첫 번째 값만 나타납니다. –

+0

@Acid. foreach 루프가 두 번 실행되는지 확인하십시오. –

1

도움하지만이 사건되지 않을 것으로 보인다하시기 바랍니다. 코드에서, 여러분 모두 내부 및 외부 루프

0
using System.Linq; 
... 

ObservableCollection<string> ListA = new ObservableCollection<string>(); 

List<string> ListB = ListA.ToList<string>(); 
관련 문제