ここでは、グリッドの状態に関連する情報を永続化する (またはしない)、さまざまなメカニズムについて説明します。
ページネーション位置、フィルタリング、ソートなどの状態情報を、プログラムによって自動的に読み取り、変更、および処理できます。
いくつかのプロパティやメソッドを使用して、設計時または実行時にこれを行うことができます。
このプロパティを使用すると、グリッドのセッション状態をプログラムで自動的に保存およびロードするかどうかを、設計時に選択できます。
次のメソッドおよびプロパティを、Web Panel オブジェクト、Web Component オブジェクト、および Web Master Panel オブジェクトのイベントで使用できます:
このメソッドでは、グリッドの状態をプログラムによってセッションからロードできます。
このメソッドでは、グリッドの状態をプログラムによってセッションに保存できます。
グリッドの [ State ] プロパティは実行時にアクセスおよび変更できます。そのタイプは SDT で、GeneXus.Common.GridState です。このプロパティを使用して、状態を別の場所に格納できます。たとえば、データベースに、アプリケーションユーザーの設定と関連付けて格納できます。ユーザーインターフェースの状態を [ State ] プロパティに自動的に割り当てる (およびその逆) かどうかは、 [ Save State ] プロパティによって決まります。
次の 3 つのケースは同等です。
A) グリッドの [ Save State ] プロパティを True に設定する
B) グリッドの [ Save State ] プロパティを False に設定し、次のように記述する
Event Start
//他のコードが数行
Grid.LoadSessionState()
EndEvent
Event Refresh
Grid.SaveSessionState()
//他のコードが数行
EndEvent
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
グリッドの状態を、データベースやキャッシュなどの場所に永続化し、 [ 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
|