我有一个datagridview,我通过循环填充然后使用单元格绘制去制作te值为“$ 0.00”的所有单元格。我现在要做的是在我的填充循环执行后我想要遍历每一行,如果每个单元格包含“$ 0.00”,我想删除整行(包括行标题)。我怎么能用循环来做这件事?我在互联网上环顾四周,遇到了“Datagridview1.rows.remove(datagridiew1 [row])”。这可以实现,以帮助我实现这一目标吗?如果是这样,怎么样?示例代码将不胜感激。谢谢!
* 已修改为包含代码 *
我有两个Subs,我在填充datagridview sub
之后立即调用了检查行 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
我的代码包括
PopulateDataGridView()
EmptyRowCheck()
我现在遇到的问题是使用此方法,它会跳过其他所有空行,只删除一半空行。
答案 0 :(得分:1)
这样的事情可以起作用:
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
这从datagridview
的底部开始,并且可以防止跳过问题。
答案 1 :(得分:0)
看起来应该是这样的:
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