最近のアクセス:
グリッドの状態の永続化

ここでは、グリッドの状態に関連する情報を永続化する (またはしない)、さまざまなメカニズムについて説明します。
ページネーション位置、フィルタリング、ソートなどの状態情報を、プログラムによって自動的に読み取り、変更、および処理できます。
いくつかのプロパティやメソッドを使用して、設計時または実行時にこれを行うことができます。

設計時の構成

グリッドの [ Save State ] プロパティ 

このプロパティを使用すると、グリッドのセッション状態をプログラムで自動的に保存およびロードするかどうかを、設計時に選択できます。

状態の永続化のプログラミング

次のメソッドおよびプロパティを、Web Panel オブジェクトWeb Component オブジェクト、および Web Master Panel オブジェクトのイベントで使用できます:

グリッドの LoadSessionState メソッド

このメソッドでは、グリッドの状態をプログラムによってセッションからロードできます。

グリッドの SaveSessionState メソッド

このメソッドでは、グリッドの状態をプログラムによってセッションに保存できます。

グリッドの [ State ] プロパティ

グリッドの [ State ] プロパティは実行時にアクセスおよび変更できます。そのタイプは SDT で、GeneXus.Common.GridState です。このプロパティを使用して、状態を別の場所に格納できます。たとえば、データベースに、アプリケーションユーザーの設定と関連付けて格納できます。ユーザーインターフェースの状態を [ State ] プロパティに自動的に割り当てる (およびその逆) かどうかは、 [ Save State ] プロパティによって決まります。

例 1: 自動化と柔軟性

次の 3 つのケースは同等です。
A) グリッドの [ Save State ] プロパティを True に設定する
B) グリッドの [ Save State ] プロパティを False に設定し、次のように記述する
Event Start
    //他のコードが数行
    Grid.LoadSessionState()
EndEvent

Event Refresh
    Grid.SaveSessionState()
    //他のコードが数行
EndEvent
: これは、Work With パターンで既定で記述されるものです。

C) グリッドの [ Save State ] プロパティを False に設定し、次のように記述する
Event Start
    //他のコードが数行
    Do 'LoadGridState'
EndEvent

Event Refresh
    Do 'SaveGridState'
    //他のコードが数行
EndEvent

/*** グリッド状態をロードおよび保存するためのサブルーチン***/

Sub 'LoadGridState'
    If (&HTTPRequest.Method = HttpMethod.Get)
        //グリッドの状態をセッションからロード&GridState.FromXml(&Session.Get(&PgmName + !"GridState"))

        If &GridState.FilterValues.Count >= 1
            &ClientName.FromString(&GridState.FilterValues.Item(1).Value)
        Endif

        If &GridState.CurrentPage > 0
            &GridPageCount = Grid.PageCount
            If (&GridPageCount > 0 and &GridPageCount < &GridState.CurrentPage)
                Grid.CurrentPage = &GridPageCount
            Else 
                Grid.CurrentPage = &GridState.CurrentPage
            Endif            
        Endif
    Endif    
EndSub

Sub 'SaveGridState'
    &GridState.FromXml(&Session.Get(&PgmName + !"GridState"))

    //グリッドの状態をセッションに保存&GridState.CurrentPage = Grid.CurrentPage
    &GridState.FilterValues.Clear()
    &GridStateFilterValue = new()
    &GridStateFilterValue.Value = &ClientName.ToString()
    &GridState.FilterValues.Add(&GridStateFilterValue)

    &Session.Set(&PgmName + !"GridState", &GridState.ToXml())
EndSub
: これは、GeneXus 16 Upgrade 11 またはそれ以前のバージョンで、Work With パターンで既定で記述されたものです。

例 2: データベース内でのグリッドの状態の永続化 

グリッドの状態を、データベースやキャッシュなどの場所に永続化し、 [ State ] プロパティを使用して後でそこからロードできます。
次に示す 2 つの例は同等です:
A) グリッドの [ Save State ] プロパティを False に設定し、次のように記述する
Event Start
    //他のコードが数行
    Grid1.State = GridStateFromBD(&pgmname, !"Grid1") //セッションおよび内部状態を更新
    Grid1.LoadSessionState() //ユーザーインターフェースを更新
EndEvent
Event Refresh
    Grid1.SaveSessionState() //ユーザーインターフェースを読み取り、セッションおよび内部状態を更新
    GridStateToDB(&pgmname, !"Grid1", Grid1.State) //内部状態をデータベースに保存
    //他のコードが数行
EndEvent
B) グリッドの [ Save State ] プロパティを True に設定し、次のように記述する
Event Start
    //他のコードが数行
    Grid1.State = GridStateFromBD(&pgmname, !"Grid1") //セッションおよび内部状態を更新
EndEvent
Event Refresh
   GridStateToDB(&pgmname, !"Grid1", Grid1.State) //内部状態をデータベースに保存
   //他のコードが数行
EndEvent


サブページ
Created: 21/04/20 02:19 by Admin Last update: 21/11/11 17:55 by Admin
カテゴリ
Powered by GXwiki 3.0