微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – Gridview在分页后不维护排序

我从类似帖子中找到的有关此问题的所有帮助都不适用于我如何设置GridView.

我已经让我的Gridview拥有动态创建的列,并且能够对其进行排序.我的分页也可以,但是如果我先排序然后转到另一个页面,它就会失去排序.

在我的Paging方法中需要更改什么来记住排序?

这是GridView的代码

Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load


    If Not IsPostBack Then

        Dim curLastName As New BoundField
        curLastName.HeaderText = "Last Name"
        curLastName.datafield = "LastName"
        curLastName.sortExpression = "LastName"
        GridView1.Columns.Insert(0,curLastName)

        Dim curFirstName As New BoundField
        curFirstName.HeaderText = "First Name"
        curFirstName.datafield = "FirstName"
        curFirstName.sortExpression = "FirstName"
        GridView1.Columns.Insert(1,curFirstName)

        Dim dt As DataTable = GetData().Tables(0)

        Dim dv As New DataView(dt)



        GridView1.DataSource = dv

        GridView1.DataBind()
    End If
End Sub

Private Function GetData() As DataSet

    Dim connectionstr As String

    connectionstr = ConfigurationManager.ConnectionStrings("dbConnectionString").ConnectionString.ToString()

    Dim myConnection As New sqlConnection(connectionstr)

    Dim ad As New sqlDataAdapter("SELECT * FROM EmployeeList where lastname like 'wil%'",myConnection)

    Dim ds As New DataSet()

    ad.Fill(ds)

    Return ds

End Function

Public Property GridViewSortDirection() As SortDirection


    Get


        If ViewState("sortDirection") Is nothing Then

            ViewState("sortDirection") = SortDirection.Ascending
        End If


        Return DirectCast(ViewState("sortDirection"),SortDirection)
    End Get

    Set(ByVal value As SortDirection)
        ViewState("sortDirection") = value
    End Set
End Property


Protected Sub GridView1_Sorting(ByVal sender As Object,ByVal e As GridViewSortEventArgs)


    Dim sortExpression As String = e.sortExpression

    If GridViewSortDirection = SortDirection.Ascending Then


        GridViewSortDirection = SortDirection.Descending


        SortGridView(sortExpression,"DESC")
    Else



        GridViewSortDirection = SortDirection.Ascending


        SortGridView(sortExpression,"ASC")
    End If

End Sub

Private Sub SortGridView(ByVal sortExpression As String,ByVal direction As String)

    Dim dt As DataTable = GetData().Tables(0)

    Dim dv As New DataView(dt)

    dv.sort = sortExpression & " " & direction

    GridView1.DataSource = dv

    GridView1.DataBind()

End Sub



Protected Sub GridView1_PageIndexChanging(ByVal sender As [Object],ByVal e As GridViewPageEventArgs)


    GridView1.PageIndex = e.NewPageIndex


    Dim dt As DataTable = GetData().Tables(0)

    Dim dv As New DataView(dt)



    GridView1.DataSource = dv

    GridView1.DataBind()



End Sub

排序和分页工作,我只是不确定我必须在我的分页方法中更改以记住排序.谢谢你的帮助!

解决方法

这是一个完整的示例代码,包括分页,排序和数据绑定:

Sub Page_load(sender As Object,e As EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        CreateGridColumns()
        BindGrid()
    End If
End Sub

Public Property SortExpression As String
    Get
        If ViewState("SortExpression") Is nothing Then
            ViewState("SortExpression") = "LastName ASC"
        End If
        Return ViewState("SortExpression").ToString
    End Get
    Set(value As String)
        ViewState("SortExpression") = value
    End Set
End Property

Private Sub CreateGridColumns()
    Dim curLastName As New BoundField
    curLastName.HeaderText = "Last Name"
    curLastName.datafield = "LastName"
    curLastName.sortExpression = "LastName"
    GridView1.Columns.Insert(0,curLastName)

    Dim curFirstName As New BoundField
    curFirstName.HeaderText = "First Name"
    curFirstName.datafield = "FirstName"
    curFirstName.sortExpression = "FirstName"
    GridView1.Columns.Insert(1,curFirstName)
End Sub

Private Sub BindGrid()
    Try
        Dim tblData = New DataTable
        Using sqlCon As New sqlClient.sqlConnection(ConfigurationManager.ConnectionStrings("dbConnectionString").ConnectionString.ToString())
            Dim sql As String = "SELECT * FROM EmployeeList ORDER BY {0}"
            Dim sqlCmd = New sqlClient.sqlCommand()
            sqlCmd.CommandText = String.Format(sql,Me.sortExpression)
            sqlCmd.Connection = sqlCon
            Using objAdapter As New sqlClient.sqlDataAdapter(sqlCmd)
                objAdapter.Fill(tblData)
            End Using
        End Using
        GridView1.DataSource = tblData 
        GridView1.DataBind()
    Catch ex As Exception
        ' Todo: log error '
        throw
    End Try
End Sub

Private Sub GridView1_PageIndexChanging(sender As Object,e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
    Me.GridView1.PageIndex = e.NewPageIndex
    BindGrid()
End Sub

Private Sub GridView1_Sorting(sender As Object,e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles GridView1.sorting
    Dim currentSortColumn,currentSortDirection As String
    currentSortColumn = Me.sortExpression.Split(" "c)(0)
    currentSortDirection = Me.sortExpression.Split(" "c)(1)
    If e.sortExpression.Equals(currentSortColumn) Then
        ' switch sort direction '
        Select Case currentSortDirection.toupper
            Case "ASC"
                Me.sortExpression = currentSortColumn & " DESC"
            Case "DESC"
                Me.sortExpression = currentSortColumn & " ASC"
        End Select
    Else
        Me.sortExpression = e.sortExpression & " ASC"
    End If
    BindGrid()
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐