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 |