关于vb.net:Trying如果行中的所有单元格具有相同的值,则删除datagridview中的整行

Trying to delete entire row in datagridview if all cells in row have same value

我有一个DataGridView,在其中我通过一个循环进行填充,然后使用Cell绘制将所有具有te值"0.00"的单元格制作出来。我现在要做的是,在执行填充循环之后,我想遍历每一行,如果每个单元格包含"$0.00",我想删除整个行(包括行标题)。我怎么能用一个循环来做这个呢?我在互联网上四处看看,发现了"dataGridView1.rows.remove(dataGridew1[row])"。这能帮助我完成吗?如果是这样,怎么办?示例代码将不胜感激。谢谢您!

*编辑以包含代码*

我有两个子函数,在其中填充DataGridView子函数后立即调用检查行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
    Sub PopulateDataGridView()
    pb.Value = 0
    pb.Visible = True
    pb.Enabled = True
    'Loop through each column
    Dim cIndex As Integer = 0
    Dim rIndex As Integer = 0
    While cIndex < DataGridView1.ColumnCount



        'Loop through and populate each row in column
        rIndex = 0
        While rIndex < DataGridView1.RowCount

            'pb.Value = pb.Value + 1

            If cIndex = 0 Then
                'Set row header titles
                DataGridView1.Rows.Item(rIndex).HeaderCell.Value = sheet.Range("A1").Offset(rIndex + 1, cIndex).Value()

                DataGridView1.Rows(rIndex).Cells(cIndex).Value = sheet.Range("A1").Offset(rIndex + 1, cIndex + 1).Value()
            End If
            If cIndex > 0 Then
                DataGridView1.Rows(rIndex).Cells(cIndex).Value = sheet.Range("A1").Offset(rIndex + 1, cIndex + 1).Value()
            End If

            'Set column header title
            DataGridView1.Columns(cIndex).HeaderText = sheet.Range("A1").Offset(0, cIndex + 1).Value

            'Change last cell (Result) color Red or Green to represent positive gain or negative loss
            If rIndex = RowCount - 2 Then
                If DataGridView1.Rows(rIndex).Cells(cIndex).Value < 0 Then
                    DataGridView1.Item(cIndex, rIndex).Style.BackColor = Color.Red
                    DataGridView1.Item(cIndex, rIndex).Style.ForeColor = Color.White
                End If
                If DataGridView1.Rows(rIndex).Cells(cIndex).Value > 0 Then
                    DataGridView1.Item(cIndex, rIndex).Style.BackColor = Color.Green
                    DataGridView1.Item(cIndex, rIndex).Style.ForeColor = Color.White
                End If
                If DataGridView1.Rows(rIndex).Cells(cIndex).Value = 0 Then
                    DataGridView1.Rows(rIndex).Cells(cIndex).Value ="Broke Even"
                End If

            End If

            pb.Value = pb.Value + 1
            rIndex = rIndex + 1
        End While

        'Make column unsortable
        DataGridView1.Columns(cIndex).SortMode = DataGridViewColumnSortMode.NotSortable

        cIndex = cIndex + 1

    End While
    pb.Visible = False
    pb.Value = 0
    pb.Enabled = False

    DataGridView1.AutoResizeColumns()

    'Resize all Row Headers so user can see Row Titles without resizing
    DataGridView1.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
End Sub

Sub EmptyRowCheck()
    Dim SkipRemove As Boolean
    'loop through rows in datagrid
    For Each Row As DataGridViewRow In DataGridView1.Rows
        SkipRemove = False
        'loop through each cell in row
        For Each Cell As DataGridViewCell In Row.Cells
            'if value is not $0.00 then set boolean and exit inner loop
            If Not Cell.Value =" $0.00" Then
                SkipRemove = True
                Exit For
            End If
        Next
        'check if to remove the row or not
        If Not SkipRemove = True Then
            DataGridView1.Rows.Remove(Row)
        End If
    Next
End Sub

我的代码包括

1
2
    PopulateDataGridView()
    EmptyRowCheck()

我现在遇到的问题是,使用这种方法,它将跳过其他空行,只删除一半空行。


类似这样的事情可能会奏效:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    Dim SkipRemove As Boolean
    Dim Rowindex As Integer
    'loop through rows in datagrid starting from the bottom
    For Rowindex = DataGridView1.Rows.Count - 1 To 0 Step -1
        SkipRemove = False
        'loop through each cell in row
        For Each Cell As DataGridViewCell In DataGridView1.Rows(Rowindex).Cells
            If Not Cell.Value ="£0.00" Then
                SkipRemove = True
                Exit For
            End If
        Next
        'check if to remove the row or not
        If Not SkipRemove = True Then
            DataGridView1.Rows.RemoveAt(Rowindex)
        End If
    Next

这从EDOCX1的底部开始(0),并起到防止跳过问题的作用。


它应该是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim RemoveThis AS Boolean = True

FOR EACH dgvrow AS Datagridviewrow IN Datagridview1.Rows
'Loop thru each row

    FOR i AS Integer = 0 to Datagridview1.Columncount
    'Loop thru each column/field of the current row

        IF NOT dgvrow(i)="$0.00" THEN RemoveThis = False
        'If any one of the cells does not contain the value"$0.00", do not remove the row
    NEXT

    If RemoveThis THEN Datagridview1.Rows.Remove(dgvrow)
    RemoveThis = True
NEXT