CGridView に CButtonColumn があり、これを押すと JS ルーチンが呼び出されます。JS ルーチンは Ajax 呼び出しを行い、レコードを削除します。目的のレコードを削除するには、レコードの主キーを JS 関数に渡す必要があります。これを相談しましたリンクし、カスタマイズしたボタン呼び出しで JS をアタッチし、PK 値をハードコーディングしてテストすることができました。同じリンクで言及されている 1 つのアプローチは、グリッドの最初の列のテキストにアクセスすることです (jQuery コードが使用されている場合は、以下の myBtn 列コードを参照してください)。そのアプローチを使用して、グリッドにPK列を表示すると問題は解決しますが、ユーザーにPK値を表示することは間違いありません。display:none を使用して htmlOPtions を設定して列を非表示にしようとしましたが、列の見出しがまだ上にぶら下がっていて、非常にみすぼらしく見えます。
以下は私のJSです(フォーマットが悪いことをお許しください、私はたくさん試しましたが、コードスニペットタグに収まりませんでした.stackoverflowで作業するものです:)
function DeleteRec(Rec_id) {
alert(Rec_id);
//var Rec_id=27;
var data=$("#subject-form").serialize();
$.ajax({
type: 'POST',
url: '<?php echo Yii::app()->createAbsoluteUrl("upm/subject/deleteRec/id"); ?>'+'/'+Rec_id,
data:data,
success:function(data){
var myObject = eval('(' + data + ')');
alert(myObject.recDelete);
},
error: function(data) { // if error occured
var myObject = eval('(' + data + ')');
alert("Error occured.please try again"+myObject);
var myObject = eval('(' + data + ')');
var myJSONText = JSON.stringify(myObject);
},
dataType:'html'
});
}
以下は私のCGridViewコードです:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $PatHistoryGrid,
'id' => 'PatGrid',
'enableSorting' => false,
'enablePagination' => false,
'columns' => array(
'id' => array(
'name' => '',
'value' => '$data->id',
'htmlOptions' => array('style' => 'display:none;',)
),
'Pat' => array(
'name' => 'Pat Name',
'value' => '$data->pat->pat_val',
'htmlOptions' => array('width' => '240'),
),
'PatDate' => array(
'name' => 'Date',
'value' => '$data->pat_date',
'htmlOptions' => array('width' => '80', 'align' => 'middle')
),
'PatNotes' => array(
'name' => 'Pat Notes',
'value' => '$data->pat_notes',
'htmlOptions' => array('width' => '480', 'align' => 'middle')
),
'PatPreNotes' => array(
'name' => 'Pat Pre Notes',
'value' => '$data->pat_pre_notes',
'htmlOptions' => array('width' => '480', 'align' => 'middle')
),
'Flag' => array(
'type' => 'raw',
'name' => 'Flag',
'value' => '$data->flag',
'htmlOptions' => array('width' => '50')
),
array(
'class' => 'CButtonColumn',
'template' => '{update} {delete} {myBtn}',
'buttons' => array(
'myBtn' => array(
'click' => 'function(){
DeleteRec($(this).parent().parent().children(":first-child").text());
}',
),
),
),
),
'htmlOptions' => array(
'style' => 'margin-top:-40px;'
),
));
フォームの隠し変数のように、CGridColumn を追加しても表示されない方法はありますか? それが可能であれば、私はこの問題を解決することができます。他のアイデアは大歓迎です。