从Grid中删除空行

时间:2017-02-22 17:38:14

标签: vb.net

我有以下代码从Devexpress Datagrid中删除空行。

 Private Sub btnRemoveBlanks_ItemClick(sender As Object, e As ItemClickEventArgs) Handles btnRemoveBlanks.ItemClick
    Try
    Dim I As Integer
        For I = 0 To StudentsGrid.DataRowCount - 1
            Dim CellValue As Object = StudentsGrid.GetRowCellValue(I, "FirstName")
        If String.IsNullOrWhiteSpace(CellValue.ToString) = True OrElse CellValue Is Nothing OrElse CellValue Is DBNull.Value Then
            ' Debug.Print("Empty")
            StudentsGrid.DeleteRow(I)
        Else
            ' Debug.Print("Not Empty")
        End If
        Next
    StudentsGrid.RefreshData()
    btnRefresh.PerformClick()
     Catch ex As Exception
     MessageBox.Show(ex.Message, "Error: " & System.Reflection.MethodBase.GetCurrentMethod.Name, MessageBoxButtons.OK, MessageBoxIcon.Error)
     End Try
End Sub

然而,一个问题是我正在接收

  

对象引用未设置为对象的实例。

开头:if string.isnullorwhitespace

或者我必须单击按钮两到三次才能删除所有空白。

有没有更好的方法来确定行是空还是空格?我有什么想法可以改进这段代码吗?

编辑:问题的主要原因是删除空白,我可以通过向后走过网格来做到这一点

1 个答案:

答案 0 :(得分:2)

你想要两件事:

  1. 通过重新排序If命令中的条件,可以解析空引用异常。
  2. 需要多次重新运行删除是由于您如何遍历行。您的For循环会迭代到网格视图中的行数。假设您目前正在查看行4并决定删除它。现在,具有前索引5的行占据该位置(每个后续行的索引减1)。在下一次迭代中,您将查看索引5,它现在是具有索引6的行,这意味着您永远不会查看原始的第五行。要解决此问题逆转你的循环
  3. 试试这个稍微更改过的代码版本(未经测试):

    Private Sub btnRemoveBlanks_ItemClick(sender As Object, e As ItemClickEventArgs) Handles btnRemoveBlanks.ItemClick
        Try
            Dim rowIdx as Integer = StudentsGrid.DataRowCount - 1
            For i as Integer = rowIdx To 0 Step -1
                Dim CellValue As Object = StudentsGrid.GetRowCellValue(I, "FirstName")
                If CellValue Is Nothing OrElse IsDBNull(CellValue) OrElse String.IsNullOrWhiteSpace(CellValue.ToString()) Then
                    ' Debug.Print("Empty")
                    StudentsGrid.DeleteRow(i)
                Else
                    ' Debug.Print("Not Empty")
                End If
            Next
            StudentsGrid.RefreshData()
            btnRefresh.PerformClick()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error: " & System.Reflection.MethodBase.GetCurrentMethod.Name, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub