Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net ListView删除带有匹配字段的行_Vb.net_Listview - Fatal编程技术网

Vb.net ListView删除带有匹配字段的行

Vb.net ListView删除带有匹配字段的行,vb.net,listview,Vb.net,Listview,我有一个列表视图,如下所示: Name | Gender | Age --------------------- Name1 | XX | 23 Name2 | XY | 21 Name3 | XY | 25 Name4 | XX | 30 当listview被填充时,它会创建一个组合框条目,如下所示: If Not ComboBox4.Items.Contains(gender) Then ComboBox4.Items.Add(gender) En

我有一个列表视图,如下所示:

Name  | Gender | Age
---------------------
Name1 |   XX   | 23
Name2 |   XY   | 21
Name3 |   XY   | 25
Name4 |   XX   | 30
当listview被填充时,它会创建一个组合框条目,如下所示:

If Not ComboBox4.Items.Contains(gender) Then
    ComboBox4.Items.Add(gender)
End If
最后我得到了一个包含两个条目XX,XY的组合框。现在我想删除与组合框中选择的性别匹配的所有行。然后,选择的条目将从组合框中删除。 示例:我选择要删除的性别“XX”,然后程序从列表视图中删除带有“name1,XX,age 23”和“name4,XX,30”的整行

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    for i = 1 to viewlist.items.count
        'Need help here to select the right column/viewlist-field
    next
    ComboBox4.Items.Remove(ComboBox4.Text)
End Sub

首先,您的循环应该从viewlist.Items.Count-1开始,并在0结束。这是因为To的右侧仅在第一次迭代之前进行评估。因此,循环将转到运行循环之前的viewlist.Items.Count-1,而不是删除项之后的实际值,这就是为什么从我以前的代码中获得ArgumentOutOfRangeException

只要每次迭代最多删除一项,从末尾开始到0,我将始终表示一个有效索引。这可以通过以下内容来说明:

第一次迭代第二次迭代第三次迭代,依此类推 项目0项目0项目0项目0 项目1项目1 i项目1 第2 i项第2项[已删除] i第3项[已删除][已删除] 现在,要获取项目的子列,可以使用。您的性别列当前位于索引1处-第一个子项索引0显然是所有子项的所有者,即原始ListViewItem

如果要使用不区分大小写的字符串比较,可以将循环中的If语句更改为:

If CurrentSubItems.Count >= 2 AndAlso String.Equals(CurrentSubItems(1).Text, ComboBox4.Text, StringComparison.OrdinalIgnoreCase) Then

这将抛出异常System.ArgumentOutOfRangeException和其他信息:InvalidArgument=索引值为1的值无效。@neverlucky:这很奇怪。。。抛出异常时i的值是多少?我能给出的唯一解释是,您有一个没有子项的ListViewItem。每当我尝试Msgboxviewlist.items.count时,它显示的数字远远大于viewlist中的实际条目数。是否可以忽略没有子项的ListViewItem?是否确实有效?程序现在总是通过viewlist.Itemsi.SubItems水平计数3,而不是垂直计数条目数。所以它总是显示3,不管我加多少XX或XY人。是这样吗?即使我有20个条目,它也只删除3个,因为它只读取了我希望您理解的列的数量mean@neverlucky:我不知道你的意思,不。。。我还没有测试代码,因为我没有访问计算机的权限,但是代码会进行检查,以便至少有两个子项0:所有者,1:性别列,并且应该删除每个项目,其中性别列是您在组合框中选择的项目。-不过我很快就能试试这个了。
If CurrentSubItems.Count >= 2 AndAlso String.Equals(CurrentSubItems(1).Text, ComboBox4.Text, StringComparison.OrdinalIgnoreCase) Then