2012-06-04 62 views
2

一直在尋找一種解決方案來爲「自定義列」添加一個功能......這意味着,我列出了一列列,可以向用戶顯示並選擇他想要查看的列表選擇表格進行更新並添加/刪除所需的列。Yii CGridView - 自定義列

沒有找到谷歌什麼(也許它比我一直在尋找......不同的名字)

任何人有如何可以實現的想法?

在此先感謝!

+0

你想用ajax,或在不同的頁面? – sucotronic

+0

需要用ajax來做 – Odinn

回答

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。您必須將數組從控制器傳遞到網格的局部視圖,並使用要顯示的自定義列列表。

+0

謝謝,我想我明白了。 – Odinn

+0

不客氣:) – sucotronic