我有以下代码从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
或者我必须单击按钮两到三次才能删除所有空白。
有没有更好的方法来确定行是空还是空格?我有什么想法可以改进这段代码吗?
编辑:问题的主要原因是删除空白,我可以通过向后走过网格来做到这一点
答案 0 :(得分:2)
你想要两件事:
If
命令中的条件,可以解析空引用异常。For
循环会迭代到网格视图中的行数。假设您目前正在查看行4
并决定删除它。现在,具有前索引5
的行占据该位置(每个后续行的索引减1)。在下一次迭代中,您将查看索引5
,它现在是具有索引6
的行,这意味着您永远不会查看原始的第五行。要解决此问题逆转你的循环。试试这个稍微更改过的代码版本(未经测试):
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