Hello,

I am currently trying to sort on a GridView after it has been populated with records from a SQL Server Express database.

I click on a column to sort it and I get the following error:

"DataTable must be set prior to using DataView."

The entirety of my code is as follows:

<script runat="server" >          
        
        Protected Sub Button3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button3.Click
            
            Dim sqlConn As New SqlConnection
        Dim sqlCmd As New SqlClient.SqlCommand
        Dim sqlReader As SqlDataReader
                        
        'If no values are supplied in the textbox, throw an error message.
            If TextBox2.Text = "" Then
                MsgBox("A centre code needs to be provided...")
            End If
            
            If TextBox2.Text <> "" Then
            
        'Telling the system the location of the database.
                sqlConn.ConnectionString = "server=ServerName;Initial Catalog=dbName;Trusted_Connection=yes"
 
        'Here we are opening the connection to the database.
                sqlConn.Open()
                
        'This is to say that sqlCmd is a stored procedure.
                sqlCmd.CommandType = System.Data.CommandType.StoredProcedure
                        
        'This is creating the command to execute the stored procedure based on the information given in the connection string.
                sqlCmd = sqlConn.CreateCommand
 
        'The command is triggered to execute the stored procedure which grabs all information for the specific centre.
                sqlCmd.CommandText = "exec ProcedureName'" & TextBox2.Text & "' "
                
        'This will read the rows in the database.
                sqlReader = sqlCmd.ExecuteReader()
                
                'If there are rows of data that match are criteria
                If (sqlReader.HasRows) Then
 
        'The rows of data are grabbed for the specific centre from the database using the data reader.
                    GridView2.DataSource = sqlReader
                    GridView2.DataBind()
                Else
                    MsgBox("The centre code provided does not exist...")
                End If
                
        'This is closing the connection to the database once we have finished with it.
                sqlConn.Close()
                
        'This is to clear the list of items out of the GridView box.
              
            End If
        End Sub
                           
        
        
 

        Protected Sub gvSorting_Sorting(ByVal sender As Object, ByVal e As GridViewSortEventArgs)
            Dim dtSortView As New DataTable
            dtSortView = GridView2.DataSource
            
            If dtSortView Is Nothing Then
                Dim dvSortedView As New DataView(dtSortView)
 
                dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection)
                
                GridView2.DataSource = dvSortedView
                GridView2.DataBind()
            End If
        End Sub
                 
        Public Function getSortDirectionString(ByVal SortDirection As SortDirection) As String
 
            Dim newSortDirection As String = String.Empty
        
            If (SortDirection = SortDirection.Ascending) Then
                newSortDirection = "ASC"
            Else
                newSortDirection = "DESC"
                'Return newSortDirection
            End If
 
            Return newSortDirection
 
        End Function
        
        
        </script>

My error comes on the following code line:

dvSortedView.Sort = e.SortExpression + " " + getSortDirectionString(e.SortDirection)

If anybody can give me any hints and tips on why this is happening, I would be extremely grateful.

From my understanding its telling me that there is no records in the GridView to sort, but why?

Thanks in advance,

Dan

Recommended Answers

All 3 Replies

my guess is that you've got an error in your logic. Rethink this part:

If dtSortView Is Nothing Then
                Dim dvSortedView As New DataView(dtSortView)

If dtSortView IS Nothing then create a dataview on Nothing?

Hello,

I have changed the above but am still getting the same issue...

"Datatable must be set prior to using the dataview".

Any ideas?

Thanks,

Dan

When you get the error, does your datatable contain rows?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.