2017-01-05 10 views
0

次の問題があります。予約番号が既にリストビューに存在するかどうかを確認したい。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)メソッドは、型TSystem.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)) 
    { 
    ... 
    } 
} 

EDIT:例

+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の中にを追加してstringと入力します(ただし、それがListView.Itemsの場合はint)。あなたのif文は次のようになります。

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

たぶん私はSubItemsにインデックスを使用してミスを犯しました。あなたはそれをチェックし、間違いがある場合はコメントを書いてください。

+0

このソリューションも私のために働いてくれてありがとう! –

関連する問題