2011-01-28 2 views
3

나는 ASP DataGrid를 가지고 있으며, 정렬 작업을 적용하고 있습니다.세션 변수를보다 효율적으로/선호하는 방법으로 사용 하시겠습니까?

Private Sub dgTasks_SortGrid(ByVal sender As Object, ByVal e As DataGridSortCommandEventArgs) Handles dgTasks.SortCommand 
    Dim strSortDirection As String = Session("SortDir") 
    If strSortDirection = Nothing Then 
     strSortDirection = " ASC " 
    Else 
     If strSortDirection = " ASC " Then 
      strSortDirection = " DESC " 
     Else 
      strSortDirection = " ASC " 
     End If 
    End If 
    Session("SortDir") = strSortDirection 
    BindData(e.SortExpression & strSortDirection) 
End Sub 

글쎄, 내가 바로 가기를 만들 일이 "쉽게"어쩌면이 가장 좋은 것이라고 생각 만들려고 노력 : 음, 예를보고 있었다, 그들은에 이름을 다른 함수에서 유사한 기능을 가지고 :이

Private Sub dgTasks_SortGrid(ByVal sender As Object, ByVal e As DataGridSortCommandEventArgs) Handles dgTasks.SortCommand 
    If Session("SortDir") = Nothing Then 
     Session("SortDir") = " ASC " 
    Else 
     If Session("SortDir") = " ASC " Then 
      Session("SortDir") = " DESC " 
     Else 
      Session("SortDir") = " ASC " 
     End If 
    End If 
    BindData(e.SortExpression & Session("SortDir")) 
End Sub 

그러나, 나는 그것에 대해 생각으로, 나는 Session("SortDir")가 요청 매번을한다 어쩌면 생각과는 어떤 영향을 미치거나 단점이있을 수 있습니다. 그러나 나는 확실하지 않았다. 누구든지 최선의 방법이나 선호하는 방법을 설명하는 링크가 있습니까? 감사.

+0

외부 'If'조건이 중복되지 않습니까? –

+0

예, 그렇습니다. 나는 그것을 생각할 때 타이핑하고 있었다.:) – XstreamINsanity

답변

1

네 번보다는 세션 값을 두 번 (읽기 하나와 쓰기) 두 번 보는 것이 분명 좋습니다. 성능 차이는 사용자가 알아 차릴 수 없지만 모든 중복 검색은 대부분의 프로그래머를 매우 불편하게 만듭니다! 그리고 이런 종류의 일이 눈에 띄는 차이를 만들 수있는 경우가 있습니다. 컬렉션에 저장된 데이터의 양 및 수행 된 조회 유형 (해시 테이블, 이진 검색, 순차 검색 등)이있을 수 있습니다. 들어갈 좋은 습관이 아닙니다.

+0

그래, 나에게 불안감이 들었다. 그래서 나는 물었다. 기술적으로 웹 프로그래밍에 익숙하지 않기 때문에 아마도 불안은 인식하지 못했을 것이라고 생각했습니다. – XstreamINsanity

1

더 나은 방법이 있기 때문에이 시나리오에서는 Session을 잘 사용하지 않습니다. 세션에는 최종 사용자에 대한 특정 데이터가 어떤 방식으로 포함되어야합니다. 난 당신이 세션에있는 sortOrder을 유지 할 수 있습니다 하나의 다른 이유를 생각 못했다이 라인

Private Property _SortDir As Nullable(Of String) ''# I used "Nullable(Of" because I don't know if you are able to use "String?" 
Public Property SortDir() As Nullable(Of String) 
    Get 
     Return _SortDir 
    End Get 
    Set 
     _SortDir = value 
    End Set 
End Property 

Private Sub dgTasks_SortGrid(ByVal sender As Object, ByVal e As DataGridSortCommandEventArgs) Handles dgTasks.SortCommand 

    If SortDir.IsNullOrEmpty Or SortDir = "DESC" Then 
     SortDir = "ASC" 
    Else 
     SortDir = "DESC" 
    End If 

    BindData(e.SortExpression & SortDir)) 
End Sub 

함께

시도 무언가 그러나 그것은 성가신 측면에 영향을 미치는 것이다. 현재 페이지를 떠나서 나중에 같은 정렬 순서로 돌아오고 싶다면 세션에 두십시오 ...하지만 사이트의 다른 곳에 다른 그리드가 있으면 다른 세션 변수를 갖게 될까요? 그것? 또는 새 그리드에 기존 정렬 순서를 유지하려고합니까? 세션 변수를 사용할 때 고려해야 할 모든 것입니다.

기존 페이지에 계속 머물고 있다면 해당 페이지에서 원하는대로 사용할 수있는 항목을 사용하십시오. 젠장, 당신은 "_VIEWSTATE"을 사용하여 정렬 순서를 저장할 수 있었지만 (나는 추천하지는 않았지만).

웹은 상태가 유지되지 않도록 설계되었으므로 "상태"를 만드는 것이 바람직하지 않습니다.

마지막으로

또 다른 옵션은 쿼리 순서에 정렬 순서를 넣고 나머지는 잊어 버리는 것입니다 (AJAX에서는 완전히 작동하지 않습니다).

+0

그 문제는 매번 SortDir이 재설정된다는 것입니다. 그래도 고마워. – XstreamINsanity

+0

어쨌든 세션 변수를 변경하고 있습니다. 세션은 클라이언트 컴퓨터에서 쿠키를 삭제하므로 매번 변수를 재설정하는 것이 아니라 세션을 통해 매번 데이터를 전송합니다. –

+0

바보 같은 외부 IF 블록을 제거하도록 편집되었습니다. –

0

당신은 세션 수준의 지속성, 나는의 제안 rockinthesixstring 에 두 개의 작은 변화를 추가 할 것입니다 원하기 때문에 :

(경고! VB를 작성하려고 C#을 코더)

Private Property _SortDir As Nullable(Of String) 
Public Property SortDir() As Nullable(Of String) 
    Get 
     Return _SortDir 
    End Get 
    Set 
     Session("SortDir") = value 
     _SortDir = value 
    End Set 
End Property 

Private Sub dgTasks_SortGrid(ByVal sender As Object, ByVal e As DataGridSortCommandEventArgs) Handles dgTasks.SortCommand 

    If SortDir = "ASC" Then 'I think the outer If block was redundant'' 
     SortDir = "DESC" 
    Else 
     SortDir = "ASC" 
    End If 

    BindData(e.SortExpression & SortDir)) 
End Sub 

Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) 
    If Not Page.IsPostBack Then 
     _SortDir = Session("SortDir") 
    End If 
End Sub 

이 코드는 대개 C &입니다. rockinthesixstring입니다.이 대답을 사용하는 경우 동의 또는 업 보트하십시오.

+0

외부 If 블록도 제거했습니다. 그것은 다소 어리 석다. –

+0

또한 속성에 Page_Load 값이 있는지 확인하는 경우 'Nullable'을 지정할 필요가 없습니다. 예,이 고양이를 스킨 할 수있는 여러 가지 방법이 있습니다 .-) –

+0

@rockinthesixstring은 문자열이 아닙니다. 이미 VB에서 nullable 가능합니까? 그것들은 C#에 있습니다. 실제로 제가 아는 다른 모든 언어들도 그것을 생각하게됩니다. null로 초기화하는 것입니까? –

관련 문제