0

Hi,

I'm trying to allow sorting my gridview writing in the code behind page. My code for Bind the GridView is like this:
   Private Sub BindMyGridView()
        Dim DatabaseConnection As New SqlConnection(ConfigurationManager.ConnectionStrings("MyServer").ConnectionString)
        Dim adapter As SqlDataAdapter = New SqlDataAdapter
        Dim selectSQL As String = "SELECT * FROM Clients WHERE id = @id"
        Dim selectCMD As New SqlCommand(selectSQL, DatabaseConnection)
        Dim id As Integer = firstGridView.SelectedValue

        selectCMD.Parameters.Add(New SqlParameter("@id ", SqlDbType.Int))
        selectCMD.Parameters("@id ").Value = id

        adapter.SelectCommand = selectCMD

        Dim dTable As DataTable = New DataTable
        adapter.Fill(dTable)

        MyGridView.DataSource = dTable
        MyGridView.DataBind()
    End Sub

And my code for sorting is like this:

Private Function SortDirectionSQL(ByVal direction As SortDirection) As String
        Dim directionSQL As String = ""
        Select Case direction
            Case SortDirection.Ascending
                directionSQL = "ASC"
            Case SortDirection.Descending
                directionSQL = "DESC"
        End Select
        Return directionSQL
    End Function

    Protected Sub MyGridView _OnSorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs)
        Dim dTable As DataTable = MyGridView.DataSource
        If dTable.Rows.Count > 0 Then
            Dim dView As New DataView(dTable)
            dView.Sort = e.SortExpression + " " + SortDirectionSQL(e.SortDirection)
            MyGridView.DataSource = dView
            BindMyGridView ()
        End If
    End Sub

However, the proble I'm having is in the line:

dTable.Rows.Count > 0

and this is happening becaus emy DataSource is always nothing.

Does anyone have ideas about how to solve this problem?

Thanks in advance.

Ana

3
Contributors
7
Replies
8
Views
8 Years
Discussion Span
Last Post by Ana D.
0

You cannot get the DataSource from GridView. You should store it in the Session or again fill it from database, sort it and then bind to the GridView again.

0

For small amount of data you can use viewstate. Better to use a datatable to bind so that for next time no need to go to the database. You can sort on datatable & rebind to Gridview.

0

I changed my code and now I'm able to retrieve the DataSource. Now what I have is:

Protected Sub MyGridView_OnSorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs)
Dim dTable As DataTable = MyGridViewDataSource()
If dTable.Rows.Count > 0 Then
Dim dView As New DataView(dTable)
dView.Sort = e.SortExpression + " " + SortDirectionSQL(e.SortDirection)
MyGridView.DataSource = dView
MyGridView.DataBind()
End If
End Sub

But even now the sorting is not working. It simply doesn't do anything. Does anyone have any ideas about what is happening?

Thanks a lot!

0

Put a break point in this event and check the execution control goes inside dTable.Rows.Count > 0 condition.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.