function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
thsrthsr 

前へ、次へみたいな改ページ機能を実現したいんですが、

100行検索結果があり、毎ページに30行を表示、「前へ」「次へ」を押すと、30行ごとにページが切り替えできるように実現したいんですが、方法をご存知の方がいらっしゃいましたら、ご教授いただけたら幸いです。

 

以上、よろしくお願いいたします。

Best Answer chosen by Admin (Salesforce Developers) 
tajimatajima
StandardSetControllerの利用はいかがでしょうか?
 
Controllerクラス内で、StandardSetControllerを作成したら
setPageSize()で1ページあたりに表示する最大レコード数をセットします。
next()で次のページへ、
previous()で前のページへ、
first()で最初のページへ、
last()で最後のページへ、
getHasNext()で次のページがあるかどうかを取得、
getHasPrevious()で前のページがあるかどうかを取得、
getPageNumber()で現在のページ番号を取得、
getResultSize()で総レコード数を取得
のように使えます。

public class SSCSample{

public ApexPages.StandardSetController ssc{get; set;}

public SSCSample() {
ssc = new ApexPages.StandardSetController(Database.getQueryLocator('Select Id, Name From CustomObject__c'));
ssc.setPageSize(30); // 1ページあたりの最大レコード数をセット
}

// 最初のページへ
public void first() {
ssc.first();
}
// 前のページへ
public void previous() {
ssc.previous();
}
// 次のページへ
public void next() {
ssc.next();
}
// 最後のページへ
public void last() {
ssc.last();
}
}

<apex:page controller="SSCSample">
<apex:form>

<apex:dataTable var="record" value="{!ssc.records}">
...
</apex:dataTable>

総レコード件数は{!ssc.ResultSize}件
現在のページは{!ssc.PageNumber}ページ目
<apex:commandLink action="{!first}" value="最初へ" rendered="{!ssc.HasPrevious}" />
<apex:commandLink action="{!previous}" value="前へ" rendered="{!ssc.HasPrevious}" />
<apex:commandLink action="{!next}" value="次へ" rendered="{!ssc.HasNext}" />
<apex:commandLink action="{!last}" value="最後へ" rendered="{!ssc.HasNext}" />

</apex:form>
</apex:page>

 


03-05-2010 06:47 PM
にtajimaにより編集されたメッセージ

All Answers

kstukudakstukuda

英語のページですが、参考になると思います。

 

Salesforce <Source>: How to support paging of data in your Visualforce Pages? 

http://salesforcesource.blogspot.com/2008/09/how-to-support-paging-of-data-in-your.html

 

 

Apexクラス内のプロパティの値を変えれば、30行ごとで分けることもできます。 

tajimatajima
StandardSetControllerの利用はいかがでしょうか?
 
Controllerクラス内で、StandardSetControllerを作成したら
setPageSize()で1ページあたりに表示する最大レコード数をセットします。
next()で次のページへ、
previous()で前のページへ、
first()で最初のページへ、
last()で最後のページへ、
getHasNext()で次のページがあるかどうかを取得、
getHasPrevious()で前のページがあるかどうかを取得、
getPageNumber()で現在のページ番号を取得、
getResultSize()で総レコード数を取得
のように使えます。

public class SSCSample{

public ApexPages.StandardSetController ssc{get; set;}

public SSCSample() {
ssc = new ApexPages.StandardSetController(Database.getQueryLocator('Select Id, Name From CustomObject__c'));
ssc.setPageSize(30); // 1ページあたりの最大レコード数をセット
}

// 最初のページへ
public void first() {
ssc.first();
}
// 前のページへ
public void previous() {
ssc.previous();
}
// 次のページへ
public void next() {
ssc.next();
}
// 最後のページへ
public void last() {
ssc.last();
}
}

<apex:page controller="SSCSample">
<apex:form>

<apex:dataTable var="record" value="{!ssc.records}">
...
</apex:dataTable>

総レコード件数は{!ssc.ResultSize}件
現在のページは{!ssc.PageNumber}ページ目
<apex:commandLink action="{!first}" value="最初へ" rendered="{!ssc.HasPrevious}" />
<apex:commandLink action="{!previous}" value="前へ" rendered="{!ssc.HasPrevious}" />
<apex:commandLink action="{!next}" value="次へ" rendered="{!ssc.HasNext}" />
<apex:commandLink action="{!last}" value="最後へ" rendered="{!ssc.HasNext}" />

</apex:form>
</apex:page>

 


03-05-2010 06:47 PM
にtajimaにより編集されたメッセージ
This was selected as the best answer
thsrthsr

ご回答ありがとうございます。

とても参考になりました。

またよろしくお願いいたします。:smileywink: