2017-01-05 2 views
0

다음과 같은 문제가 있습니다. 예약 번호가 이미 내 listview에 있는지 확인하고 싶습니다.listview에서 특정 번호가 포함되어 있는지 확인

다음 코드는 listview에 예약을 추가하는 코드입니다.

reservations.Add(new Reservation(nameTextbox.Text, lastnameTextBox.Text, gendercomboBox.SelectedText, Convert.ToInt32(ageNumericUpDown.Value), Convert.ToInt32(kamercomboBox.SelectedIndex) + 1, Convert.ToInt32(quantityUpDown.Value), true)); 
reserveringListView.Items.Clear(); 
foreach (Reservation reservation in reservations) 
{ 
    if (!reserveringListView.Items.Contains(reservation.roomnumber)) 
    { 
     ListViewItem livi = new ListViewItem(reservation.name); 
     livi.SubItems.Add(reservation.lastname); 
     livi.SubItems.Add(Convert.ToString(reservation.gender)); 
     livi.SubItems.Add(Convert.ToString(reservation.age)); 
     livi.SubItems.Add(Convert.ToString(reservation.quantity)); 
     livi.SubItems.Add(Convert.ToString(reservation.roomnumber)); 
     reserveringListView.Items.Add(livi); 
    } 
    else 
    { 
     MessageBox.Show("Its impossible to reserve") 
    } 
} 

나는 다음과 같은 오류가이 코드를 테스트 할 때 :에서 INT System.Windows.Forms.ListViewItem

로 변환 할 수 없습니다

답변

0
List<T>.Contains은 ( docs) 메소드는 유형 T의 인수 ( System.Windows.Forms.ListViewItem을) 기대

당신의 경우에. 하지만 그 방법으로 int을 전달하려고합니다. 그게 왜 당신이 오류가 발생합니다.

케이스에 HashSet<int>을 작성하고 reservation.roomnumber을 저장하면 roomnumber이 이미있는 경우 다음 번에 볼 수 있습니다.

예 :

reserveringListView.Items.Clear(); 
HashSet<int> roomCheck = new HashSet<int>(); 
foreach (Reservation reservation in reservations) 
{ 
    if (roomCheck.Add(reservation.roomnumber)) 
    { 
    ... 
    } 
} 

편집 : 예

+0

두 솔루션 모두 작동했습니다. Fine –

1

단지 매개 변수로있는 ListViewItem을 허용하는 동안, 당신은 .Contains 방법을 int로 매개 변수를 제공하고 있기 때문에 오류가 발생하는 추가

다음을 시도해보십시오.

if (!reserveringListView.Items.Any(litem => litem.SubItems[5].Value == reservation.roomnumber)) 
{ 

} 
+0

. 항목이 나에게 적합하지 않으면 Windows.Forms.Something과 같은 것을 가져올 필요가 있습니다. –

+0

은'using System.Linq; '이어야합니다. – Frogger

+0

'string'과'int'를 비교하므로'reservation.roomnumber'를'string' 또는'.Value'를'int'로 변환해야합니다. – JohnnyAW

1

ListView.Itemsint이 포함되어 있는지 확인하기 때문에 if 문이 표시됩니다. 당신은 이것을 할 수없고 또한 if 안에 roomnumber을 넣으십시오. string (그러나 ListView.Itemsint 인 지 확인하십시오). 귀하의 if 문은 다음과 같아야합니다

if (!reserveringListView.Items.Cast<ListViewItem>().Any((i) => i.SubItems[5].Text == Convert.ToString(reservation.roomnumber))) 

은 어쩌면 내가 SubItems에 인덱스 실수를했다. 그것을 확인하고 실수가 있으면 의견을 적어주십시오.

+0

이 솔루션은 또한 나를 위해 고마워! –

관련 문제