0

首先,实际上我没有使用 CGridView,而是使用来自YiiBooster 的TbExtendedGridView。我在标题上使用 CGridView 是因为它更熟悉,但这两件事仍然以完全相同的方式工作。

我在我的 TbExtendedGridView (TbJEditableColumn) 上启用了内联编辑。TbExtendedGridView 正在使用 jquery 的 Jeditable 来实现此功能。这个Jeditable 也适用于 CGridView

感谢这个 SO 的问题:Change the Row Color Based on the Column value in CGridView

我知道如何更改行颜色。但是,它仍然不能使用内联编辑功能。rowCssClassExpression所以,我的问题是,每次我在列上编辑一些值时,如何更新它?

这是我的观点代码[root]/protected/views/transaction/admin.php

<?
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
    'id'=>'transaction-grid',
    'rowCssClassExpression'=>'$data->getCssClass()',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        array(
            'name'=>'date',
            'value'=> 'date("j M Y", strtotime($data->date))',
            'htmlOptions' => array('style'=>'width:52px')
        ),
        array(
            'name' => 'amount',
            'value' => 'number_format($data->amount, 0, ",", ".")',
            'htmlOptions' => array('class'=>'currency', 'style'=>'width:72px')
        ),
        array(
            'name' => 'category_name',
            'value'=>'$data->category->name',
            'header'=>'Category',
            'sortable' => 'true',
            'htmlOptions' => array('style'=>'width:131px'),
            'class'=>'bootstrap.widgets.TbJEditableColumn',
            'jEditableOptions' => array(
                'type' => 'optgroup',
                'loadurl' => Yii::app()->baseUrl . '/index.php/transaction/getCategory',
                'submitdata' => array('attribute'=>'category'),
                'cssclass' => 'form',
                'width' => '180px',
                'submit' => 'save changes'
            )
        ),
        array(
            'name'=>'desc',
            'value'=>'$data->desc',
            'htmlOptions' => array('class'=>'desccell'),
            'class'=>'bootstrap.widgets.TbJEditableColumn',
            'jEditableOptions' => array(
                'type' => 'text',
                // very important to get the attribute to update on the server!
                'submitdata' => array('attribute'=>'desc'),
                'cssclass' => 'form',
                'width' => '180px',
            )
        ),
        array(
            'htmlOptions' => array('nowrap'=>'nowrap'),
            'class'=>'bootstrap.widgets.TbButtonColumn',
        )
    )
)

这是我的getCssClass代码[root]/protected/models/Transaction.php

public function getCssClass(){
        $categoryType = Category::model()->findByPk($this->categoryId)->getAttribute("type");
        $categoryName = Category::model()->findByPk($this->categoryId)->getAttribute("name");

        $class = "";

        if($categoryName == "Uncategorized Income"){
            $class = "darkgreen";
        }
        else if($categoryName == "Uncategorized Expense"){
            return "darkred";
        }
        else if($categoryType == "INCOME"){
            return "green ";
        }
        else if($categoryType == "EXPENSE" || $categoryType == "COST OF GOODS"){
            return "red ";
        }
        else if($categoryType == "WITHDRAW" || $categoryType == "DEPOSIT" ){
            return "blue ";
        }
        else{
            return "grey ";
        }

        return $class . " " . $categoryName . " " . $categoryType;
    }
4

1 回答 1

0

使用“afterAjaxUpdate”属性在任何更新时触发 javascript 函数。

'afterAjaxUpdate' => ' function(){ //enterJScode }',
于 2013-02-24T21:33:01.890 回答