2013-12-23 36 views
0

我有一个datagridview,我通过循环填充,然后使用单元格绘制去使所有单元格te值“$ 0.00”。我现在要做的是在我的填充循环执行后,我想遍历每一行,如果每个单元格包含“$ 0.00”,我想删除整个行(包含行头)。我怎样才能做到这一点循环?我四处寻找互联网,并遇到“Datagridview1.rows.remove(datagridiew1 [row])”。这可以帮助我实现这个目标吗?如果是这样,怎么样?示例代码将不胜感激。谢谢!试图删除datagridview中的整个行,如果行中的所有单元格具有相同的值

* 编辑,包括代码 *

我有两个替补在我称之为校验行中填入的DataGridView子之后

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() 

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

+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的底部,向上的工作防止逃课问题。

+0

这是大部分工作。唯一不寻常的是它跳过其他所有空行,因此它只会删除一半空行。任何想法为什么? – CaffeinatedCoder

+0

是的,我知道为什么 - 会发布更新来纠正此问题! – OSKM

+0

现在完美,谢谢! – CaffeinatedCoder

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 
+0

尝试实施您的方法时收到以下错误。错误是'dgvrow',错误是“Class'System.Windows.Forms.DataGridViewRow'无法被索引,因为它没有默认属性。” – CaffeinatedCoder

相关问题