如何在GRIDVIEW WITH ROW EXPAND AND COLLAPSE中显示像网格一样的网格视图,当点击应该显示相应行的详细信息的行时,网格应该在视图中显示正常数据..请帮助这个... 我的输出应该像
当我单击该行时,它应该展开并提供详细信息(图像将显示表格,但不需要我需要渲染详细视图)。
已编辑我忘记添加网格将从一个模型加载,行详细信息将从另一个模型加载。
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'books-grid',
'dataProvider'=>$model->Projectwisereport(),
//'filter'=>$model,
'columns'=>array(
array(
'name' => 'Project',
'value' => 'Project::model()->findByPk($data->Project)->proj_name',
'filter'=>CHtml::listData(Project::model()->findall(),'proj_id','proj_name'),
),
'isbn_no',
'source_type',
array(
'name' => 'complexity',
'value' => 'Complexity::model()->findByPk($data->complexity)->Complexity_Name',
'filter'=>CHtml::listData(Complexity::model()->findall(),'id','Complexity_Name'),
'footer'=>'Total Page',
),
array('class'=>'CButtonColumn',
'template'=>'{detail}',
'buttons'=>array(
'detail'=>array(
'label'=>'Show Details',
'url' =>'Yii::app()->createUrl("Process/View", array("id"=>$data->book_id))',
'options'=>array('title'=>'Show details','class'=>'detailsLink'),
'click'=>"$('#your-grid-book_id').on('click','.detailsLink',function(){
var row=$(this).closest('tr');
var url=$(this).attr('href');
$.get(url,{},function(data){
row.after(data.row);
},'json');
})",
)
)
)
),
)); ?>
我试过这个,但没有使用网格来自书籍模型和链接到CButton列中的流程模型
答案 0 :(得分:4)
试试这个:
在GridView中:
'columns'=>array
(
'ID',
array
(
'name'=>'...',
'htmlOptions'=>array('class'=>'plus','id'=>$data->id),
'value'=>'...',
),
...
),
js code:
$(".plus").click(function(){
var data = $(this).attr('id');
var url = ...ajax url...
jQuery.ajax({
'type':'post',
'data':data,
'url':url,
'cache':false,
'success':function(html){
var new_data = $("<div></div>").attr("class", "appended_data").html(html).attr("id",data);
$(this).parent().append(new_data);
$(this).removeClass('plus');
$(this).addClass('minus');
}
});
});
从你的控制器ajax动作发送数据在trs(表行)..我希望代码是自我解释..
答案 1 :(得分:0)
从Rajats的回答我得到了这样的工作:
在gridview按钮中:
array(
'class' => 'ButtonColumn',
'template' => '{view}{confirm}',
'evaluateID' => true,
'buttons' => array(
'view' => array(
'icon' => 'info-sign white',
'url' => '#',
'options' => array(
'title' => Yii::t('app', 'view'),
'onclick' => 'javascript:toggleRow($(this).attr("id"))',
'class' => 'btn-primary',
'id' => '$data->id'
),
为了能够从行数据为按钮分配ID,您需要使用自定义ButtonColumn类,我使用了这里发布的类:http://www.yiiframework.com/wiki/372/cbuttoncolumn-use-special-variable-data-for-the-id-in-the-options-of-a-button/
javascript代码:
function toggleRow(id) {
if ($('#table'+id).length) {
$('#table'+id).remove();
} else {
$.ajax({
'type': 'post',
'data': {
"payment_id": id
},
'url': "<?php echo Yii::app()->createUrl('controller/action'); ?>",
'success': function (html) {
var new_data = $("<tr></tr>").attr("class", "btn-danger").html(html).attr("id", "table"+id);
new_data.insertAfter($('#' + id).parent().parent());
},
'error': function (err) {
console.log(err);
}
});
}
}
在控制器操作中,从ajax提供的id中找到模型并返回一个html字符串:
public function actionControlleraction(){
if (isset($_POST['payment_id'])) {
$payment = Payment::model()->findByPk($_POST['payment_id']);
$html = $payment->createHtmlTable();
print_r($html);
}
}
在上面的示例中,表格的html代码是在我的付款模式中生成的。