2012-09-28 3 views
2

현재 GridView에서 페이지를 변경하는 동안 정렬 환경 설정을 유지 관리하는 코드를 작성하려고합니다. 내 현재 코드가 사용자 정렬 선택을 기반으로 데이터를 정렬하려면 잘 작동합니다. 그러나 페이지를 변경할 때 정렬이 작동하지 않습니다. 오류가 아니라 오히려 결과가 정렬되지 않습니다. 코드가 경우에도 DataView를의 정렬 속성을 변경한다, 당신은 GetData의() 함수를 호출 할 때마다 문제가GridView에서 페이징으로 정렬 유지

Public Class ViewUsers 
Inherits SolutionBasePage 

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

    If Not Page.IsPostBack Then 
     tblAdministrators.DataSource = GetData() 
     tblAdministrators.DataBind() 
    End If 

End Sub 

Private Const ASCENDING As String = " ASC" 
Private Const DESCENDING As String = " DESC" 

Private Function GetData() As Data.DataView 

    Dim connection As OracleDBConnect = DAL.GetOracleDBConnection() 
    Dim request As OracleDBRequest = Nothing 
    Dim result As OracleDBResult = Nothing 
    Dim trace As OracleDBChronoTrace = Nothing 
    Dim status As DBStatus 
    Dim sb As New StringBuilder 
    Dim dv As DataView 
    Dim ds As Data.DataSet = New Data.DataSet 

    Try 

     With sb 
      .Append("SELECT FULLNAME, ACTIVE FROM USERS") 
     End With 

     request = New OracleDBRequest(sb.ToString, CommandType.Text) 

     status = connection.Execute(request, result, trace) 

     dv = New DataView(result.DataSet.Tables(0)) 

     If (ViewState("sortExp") IsNot Nothing) Then 
      dv = New Data.DataView(result.DataSet.Tables(0)) 

      If (GridViewSortDirection = SortDirection.Ascending) Then 
       GridViewSortDirection = SortDirection.Descending 
       dv.Sort = CType(ViewState("sortExp") & DESCENDING, String) 
      Else 
       GridViewSortDirection = SortDirection.Ascending 
       dv.Sort = CType(ViewState("sortExp") & ASCENDING, String) 
      End If 
     Else 
      dv = result.DataSet.Tables(0).DefaultView 
     End If 

     Return dv 

    Catch ex As Exception 

    Finally 
     'ds.Dispose() 
     'dp.Dispose() 
    End Try 

End Function 

Public Property GridViewSortDirection() As SortDirection 
    Get 
     If ViewState("sortDir") Is Nothing Then 
      ViewState("sortDir") = SortDirection.Ascending 
     End If 

     Return CType(ViewState("sortDir"), SortDirection) 
    End Get 

    Set(ByVal value As SortDirection) 
     ViewState("sortDir") = value 
    End Set 

End Property 


Protected Sub tblAdministrators_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles tblAdministrators.PageIndexChanging 

    tblAdministrators.PageIndex = e.NewPageIndex 
    tblAdministrators.DataSource = GetData() 
    tblAdministrators.DataBind() 

End Sub 


Protected Sub tblAdministrators_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles tblAdministrators.Sorting 

    ViewState("sortExp") = e.SortExpression 
    tblAdministrators.DataSource = GetData() 
    tblAdministrators.DataBind() 

End Sub 

End Class 
+0

시도는 코드를 한 단계 및 PageIndexChanging에의 ViewState ("sortExp")의 값이 무엇을 볼 수 있습니다. 그것은 당신에게 단서를 제공해야합니다. –

+0

팁 주셔서 감사. 제가 1 페이지에서 2 페이지로 갈 때, 정렬은 2에서 3으로 오름차순입니다. 정렬은 유지되지 않습니다. 그래서 내 코드에는 정말 잘못된 것이 있습니다! –

답변

3

:

<asp:GridView ID="tblAdministrators" runat="server" AutoGenerateColumns="false" EmptyDataText="No records found" PageSize="75" AllowPaging="True" AllowSorting="True"> 

    <Columns> 
    <asp:BoundField HeaderText="Name" InsertVisible="False" DataField="FULLNAME" SortExpression="FULLNAME"></asp:BoundField> 
    </Columns> 
    <Columns> 
    <asp:BoundField HeaderText="Active" InsertVisible="False" DataField="ACTIVE" SortExpression="ACTIVE"></asp:BoundField> 
    </Columns> 

</asp:GridView> 

가 여기 내 VB 코드입니다 :

여기 내 영문 코드입니다 그것은 PageIndexChaging 이벤트에 의해 호출됩니다.

If (GridViewSortDirection = SortDirection.Ascending) Then 
    GridViewSortDirection = SortDirection.Descending 
    dv.Sort = CType(ViewState("sortExp") & DESCENDING, String) 
Else 
    GridViewSortDirection = SortDirection.Ascending 
    dv.Sort = CType(ViewState("sortExp") & ASCENDING, String) 
End If 

SortDirection을 허용하도록 GetData() 함수를 수정할 수 있습니다. 그런 다음 tblAdministrators_PageIndexChanging 및 tblAdministrators_Sorting 이벤트에서 GridViewSortDirection을 전달하십시오. 이런 식으로 뭔가 :

Private Function GetData(sort As SortDirection) As Data.DataView 
' your code here... 
End Function 

Protected Sub tblAdministrators_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles tblAdministrators.PageIndexChanging 
    tblAdministrators.PageIndex = e.NewPageIndex 
    tblAdministrators.DataSource = GetData(GridViewSortDirection) 
    tblAdministrators.DataBind() 
End Sub 

Protected Sub tblAdministrators_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles tblAdministrators.Sorting 
    ViewState("sortExp") = e.SortExpression 
    GridViewSortDirection = If(GridViewSortDirection = SortDirection.Descending, SortDirection.Ascending, SortDirection.Descending) 
    tblAdministrators.DataSource = GetData(GridViewSortDirection) 
    tblAdministrators.DataBind() 
End Sub 
관련 문제