Here's the solution:
To roll the error into a DevExpress gridview, you must use the ObjectDisposing event of the object data source for the grid to capture the error text. Then use the the CustomErrorText event of the grid itself to display the message in the error row of the grid. Make sure that you are throwing the error in the function of the data class. It must be unhandled or the custom error event won't fire.
' In data class function:
' In code page
If sErrorRollUp <> "" Then
Throw New Exception(sErrorRollUp)
End If
Protected Sub ObjectDataSource1_ObjectDisposing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceDisposingEventArgs) Handles ObjectDataSource1.ObjectDisposing
Protected Sub ASPxGridView1_CustomErrorText(ByVal sender As Object, ByVal e As DevExpress.Web.ASPxGridView.ASPxGridViewCustomErrorTextEventArgs) Handles ASPxGridView1.CustomErrorText
Dim err As Object = e
err.ErrorText = Session(
"businessrule_error")
End Sub
Dim objBusinessRuleException As Object = e.ObjectInstance
Session("businessrule_error")
End Sub