列表视图检查包含特定数字

时间:2017-01-05 10:48:29

标签: c# 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

3 个答案:

答案 0 :(得分:2)

您应该更改if语句,因为您检查ListView.Items是否包含int。您无法执行此操作,并且在ifroomnumber添加string ListView.Items(但您检查它是int中的if)。您的if (!reserveringListView.Items.Cast<ListViewItem>().Any((i) => i.SubItems[5].Text == Convert.ToString(reservation.roomnumber))) 声明应为:

SubItems

也许我对{{1}}中的索引犯了错误。您应该检查一下,如果有错误请写评论。

答案 1 :(得分:1)

您收到错误是因为您为.Contains方法提供了一个int参数,而它只接受ListViewItem作为参数

尝试类似:

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

}

答案 2 :(得分:0)

List<T>.Containsdocs)方法需要一个类型为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))
    {
    ...
    }
}

编辑:添加了一个例子