2

一直在寻找为“自定义列”添加功能的解决方案......意思是,我提供了一个列列表,我可以向用户显示这些列,他选择他想要查看的列,选择后更新表格并添加/删除所需的列。

在 Google 上没有找到任何东西(也许它的名称与我正在寻找的名称不同......)

有人对如何实现有想法吗?

提前致谢!

4

1 回答 1

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。您必须将一个数组从您的控制器传递到网格的局部视图,其中包含您要显示的列的自定义列表。

于 2012-06-04T15:23:38.477 回答