一直在寻找为“自定义列”添加功能的解决方案...意思是,我提供了一个列表,我可以向用户显示这些列,并选择他想要查看的列,在选择后,表格为更新并添加/删除所需的列。
在谷歌上没有找到任何东西(也许它的名称与我想要的名称不同......)
任何人都有关于如何实现的想法?
提前致谢!
答案 0 :(得分:3)
这不是一个完整的示例,但可以为您提供有关如何实现它的一些线索。您需要定义某种形式来收集有关如何呈现网格的数据。如果有超过3个输入字段,我建议你创建一个CFormModel类。使用表单和包含网格的文件的div或renderPartial创建一个视图文件:
$form = $this->beginWidget('CActiveFormExt');
echo $form->errorSummary($model);
echo $form->labelEx($model,'column1');
echo $form->dropDownList($model
echo $form->error($model,'column1');
echo CHtml::ajaxSubmitButton('UpdateGrid',array('controller/grid'),
array('update'=>'#grid'),
$this->endWidget();
// you can render the 'default options' before any ajax update
$this->renderPartial('_grid',array($customColumns=>array('id','name'),'dataProvider'=>$dataProvider));
在_grid.php视图文件中:
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'grid',
'dataProvider'=>$dataProvider,
'columns' => $customColumns;
));
在控制器中:
function actionGrid(){
// recover the form data, and build the custom columns array
$customColumns = array();
$customColumns[] = '.....';
$dataProvider = ...;
$this->renderPartial('_formTrabajo', array('customColumns' => $idSiniestro, 'dataProvider' => $dataProvider'), false);
}
当您单击ajaxSubmitButton时,表单将发送到通过ajax指定的url,并且来自控制器的回复必须包含包含网格的视图的renderPartial,因此jQuery调用可以正确替换html。您必须将数组从控制器传递到网格的局部视图,并显示要显示的自定义列。