RadPHP XEのListViewにAjaxで項目を追加する方法を試行錯誤した結果をまとめます。
なお、rpclは現時点での最新版を使用しています。
フォームにListViewとButtonを配置します。
Button1をクリックすると、ListViewに項目を追加します。
class Unit1 extends Page
{
public $Button1 = null;
public $ListView1 = null;
function Button1Click($sender, $params)
{
//新しい項目を追加する
$caption = 'New Item';
$subitems = array('Sub Item 1', 'Sub Item 2');
$item = $this->ListView1->addItem($caption, $subitems);
}
function Button1JSClick($sender, $params)
{
echo $this->Button1->ajaxCall('Button1Click');
?>
//begin js
return false;
//end
<?php
}
}
Button1のJavascriptのOnClickイベントでButton1JSClickを実行します。
Button1JSClickではAjaxでButton1Clickを実行します。
さて、Button1をクリックするとListViewに項目が追加されます。
しかし、何度Button1をクリックしても、ListViewには項目が一つしか登録されません。
どうやら、AjaxではListViewに登録されている項目の情報が送信されていないため、
そのため毎回ListViewの項目がリセットされているようです。
そこで、ListViewの項目をパラメータで送信するようにしました。
function Button1JSClick($sender, $params)
{
?>
//リストビューの項目をparamsに登録する
params = ListView1.getTableModel().getData();
<?php
echo $this->Button1->ajaxCall('Button1Click');
?>
//begin js
return false;
//end
<?php
}
PHP側では、受け取ったListViewの項目の値を、ListViewに登録し直します。
引数$paramsにはリストビューの項目の値が入っています。
function Button1Click($sender, $params)
{
//ListViewの項目を登録し直す
foreach ($params as $row)
{
$caption = array_shift($row);
$this->ListView1->addItem($caption, $row);
}
//新しい項目を追加する
$caption = 'New Item';
$subitems = array('Sub Item 1', 'Sub Item 2');
$item = $this->ListView1->addItem($caption, $subitems);
}
これでAjaxでListViewに項目を追加できるようになりました。
まだ問題があって、ListItemのDataプロパティに登録した値が消えてしまいます。
function Button1Click($sender, $params)
{
//ListViewの項目を登録し直す
foreach ($params as $row)
{
$caption = array_shift($row);
$this->ListView1->addItem($caption, $row);
}
//新しい項目を追加する
$caption = 'New Item';
$subitems = array('Sub Item 1', 'Sub Item 2');
$item = $this->ListView1->addItem($caption, $subitems);
//ListItemのDataプロパティにデータを登録する
$item->Data = array('time' => date('G:H:i:s')); //記録されない
}
何かいい方法はないでしょうか。
追記:
コメント欄で教えたいただいた方法でAjaxでListViewの項目を編集することができました。
実際の方法は「RadPHPのListViewの項目をAjaxで編集する方法」をご覧ください。
参考になりますか?
[RadPHP XE – xajaxでJavaScriptコードを送り返す]
http://blogs.embarcadero.com/teamj/2010/10/21/1453/
RPCLの最新リビジョン Rev.286 の xajax が 0.2.5 から 0.5 に上がっているため、ブログを書き直しました。
http://blogs.embarcadero.com/teamj/2010/10/21/1453/
高橋智宏さま
教えていただいたブログを拝見しました。
この方法を使うとうまくできそうですね。
試してみます。
Pingback: RadPHPのListViewの項目をAjaxで編集する « 山本隆の開発日誌
當同時使用 ListView1,ListView2,ListView3 時
請問如何做 ?
謝謝