I am passing in a start date, an end date, a SQL stored procedure, and a identifying area code into a shared function to populate five declared datatables.
Public Shared Function getNBOCAPData(ByVal startDate As DateTime, ByVal endDate As DateTime, ByVal sp As String, ByVal orgCode As String) As DataTable
Dim SqlConn As New SqlConnection(ConfigurationManager.ConnectionStrings("CancerRegisterConnectionString").ConnectionString.ToString)
Dim sqlCmd As New SqlCommand
getNBOCAPData = New DataTable
Try
SqlConn.Open()
sqlCmd.CommandType = CommandType.StoredProcedure
sqlCmd.Connection = SqlConn
sqlCmd.CommandTimeout = 300
sqlCmd.CommandText = sp
sqlCmd.Parameters.AddWithValue("@StartDate", startDate)
sqlCmd.Parameters.AddWithValue("@EndDate", endDate)
sqlCmd.Parameters.AddWithValue("@UserOrgCode", orgCode)
Dim reader As SqlDataReader = sqlCmd.ExecuteReader()
getNBOCAPData.Load(reader)
Catch ex As Exception
Common.LogError(ex, True)
Finally
SqlConn.Close()
SqlConn.Dispose()
End Try
End Function
The results of this function are then passed into the datatables like this
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim patiDataTable As DataTable = getNBOCAPData(Request.QueryString("startDate"), Request.QueryString("endDate"), "NBOCAP_DOWNLOAD_PATI", Request.QueryString("orgCode"))
Dim tumDataTable As DataTable = getNBOCAPData(Request.QueryString("startDate"), Request.QueryString("endDate"), "NBOCAP_DOWNLOAD_TUM", Request.QueryString("orgCode"))
Dim surDataTable As DataTable = getNBOCAPData(Request.QueryString("startDate"), Request.QueryString("endDate"), "NBOCAP_DOWNLOAD_SUR", Request.QueryString("orgCode"))
Dim cheDataTable As DataTable = getNBOCAPData(Request.QueryString("startDate"), Request.QueryString("endDate"), "NBOCAP_DOWNLOAD_CHE", Request.QueryString("orgCode"))
Dim patDataTable As DataTable = getNBOCAPData(Request.QueryString("startDate"), Request.QueryString("endDate"), "NBOCAP_DOWNLOAD_PATH", Request.QueryString("orgCode"))
Dim hidCount As Integer = 0
If patiDataTable.Rows.Count = 0 Then
divPati.Visible = False
hidCount += 1
End If
If tumDataTable.Rows.Count = 0 Then
divTum.Visible = False
hidCount += 1
End If
If surDataTable.Rows.Count = 0 Then
divSur.Visible = False
hidCount += 1
End If
If cheDataTable.Rows.Count = 0 Then
divChe.Visible = False
hidCount += 1
End If
If pathDataTable.Rows.Count = 0 Then
divPath.Visible = False
hidCount += 1
End If
If hidCount = 5 Then
divNoResults.Visible = True
divInstructions.Visible = False
Else
ViewState("patiDataTable") = patiDataTable
ViewState("tumDataTable") = tumDataTable
ViewState("surDataTable") = surDataTable
ViewState("cheDataTable") = cheDataTable
ViewState("pathDataTable") = pathDataTable
End If
End Sub
The databinding is done like this
Public Shared Sub RetRptBySPNBOCAP(ByRef dg As GridView, ByVal dataTable As DataTable)
dg.DataSource = dataTable
dg.DataBind()
End Sub
Then in preparation for the datatables to be sent to an Excel file the data in ViewState is set to a DataTable like this, but the dataTable.Rows.Count() is throwing a NullReferenceException error as though the databind isn't taking place?
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim cellDate As DateTime = DateTime.MinValue
Dim dataTable As DataTable = Nothing
Dim prefix As String = "Pati_NBOCAP"
Select Case (Request.QueryString("type").ToString)
Case "Pati"
dataTable = ViewState("patiDataTable")
Case "Tum"
dataTable = ViewState("tumDataTable")
prefix = "Tum_NBOCAP"
Case "Che"
dataTable = ViewState("cheDataTable")
prefix = "Che_NBOCAP"
Case "Path"
dataTable = ViewState("pathDataTable")
prefix = "Path_NBOCAP"
Case "Sur"
dataTable = ViewState("surDataTable")
prefix = "Sur_NBOCAP"
End Select
RetRptBySPNBOCAP(Results, dataTable)
Dim rCount As Integer
If dataTable.Rows.Count() > 0 Then
rCount = dataTable.Rows.Count()
End If
End Sub