I have a GridView where I do paging and sorting (on multiple columns).
When I initially display the GridView paging works correctly. When I sort on a column it sorts the column correctly. But when I do paging after I have sorted a column it does not display the column in sort order (it looks like it always defaults to asc). Can anyone help please:
Code:
Protected Sub GridView1_PageIndexChanging1(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
mySqlDataSet = Session("mySqlDataSet")
GridView1.PageIndex = e.NewPageIndex
GridView1.DataSource = mySqlDataSet
GridView1.DataBind()
End Sub
Private Property GridViewSortDirection() As String
Get
Return IIf(ViewState("SortDirection") = Nothing, "DESC", ViewState("SortDirection"))
End Get
Set(ByVal value As String)
ViewState("SortDirection") = value
End Set
End Property
Private Property GridViewSortExpression() As String
Get
Return IIf(ViewState("SortExpression") = Nothing, String.Empty, ViewState("SortExpression"))
End Get
Set(ByVal value As String)
ViewState("SortExpression") = value
End Set
End Property
Private Function GetSortDirection() As String
Select Case GridViewSortDirection
Case "ASC"
GridViewSortDirection = "DESC"
Case "DESC"
GridViewSortDirection = "ASC"
End Select
Return GridViewSortDirection
End Function
Protected Function SortDataTable(ByVal dataTable As Data.DataTable, ByVal isPageIndexChanging As Boolean) As Data.DataView
If Not dataTable Is Nothing Then
Dim dataView As New Data.DataView(dataTable)
If GridViewSortExpression <> String.Empty Then
If isPageIndexChanging Then
dataView.Sort = String.Format("{0} {1}", GridViewSortExpression, GridViewSortDirection)
Else
dataView.Sort = String.Format("{0} {1}", GridViewSortExpression, GetSortDirection())
End If
End If
Return dataView
Else
Return New Data.DataView()
End If
End Function
Protected Sub gridView1_Sorting(ByVal sender As Object, ByVal e As GridViewSortEventArgs)
Session("InitialSort") = "False"
GridViewSortExpression = e.SortExpression
mySqlDataSet = Session("mySqlDataSet")
GridView1.DataSource = mySqlDataSet.Tables("JobListTable")
GridView1.DataSource = SortDataTable(GridView1.DataSource, False)
GridView1.DataBind()
End Sub
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
e.Row.Height = Unit.Pixel(20)
End Sub
Sub AddSortImage(ByVal sortColumnIndex As Integer, ByVal HeaderRow As GridViewRow)
Dim sortImage As New Image() 'Create the sorting image based on the sort direction.
If GridViewSortDirection = "ASC" Then
sortImage.ImageUrl = "~/Icons/up.gif"
End If
If GridViewSortDirection = "DESC" Then
sortImage.ImageUrl = "~/Icons/down.gif"
End If
HeaderRow.Cells(sortColumnIndex).Controls.Add(sortImage) 'Add the image to the appropriate header cell.
End Sub
Function GetSortColumnIndex() As Integer
Dim field As DataControlField 'Iterate through the Columns collection to determine the index of the column being sorted.
For Each field In GridView1.Columns
If field.SortExpression = GridViewSortExpression Then
Return GridView1.Columns.IndexOf(field)
End If
Next
Return -1
End Function