ZheX Blog Idea来源于生活的经验

7十二/098

Yii GridView 初探

最近在社区成员的强烈要求下,qiang也开始开发了Yii的GridView widget。根据qiang的意思此widget应该会在1.1rc的时候发布。不过今天当我更新svn的时候发现这个插件已经出现在zii的插件包中了,新东西当然都试下,接下来让我们看看 CGridView是怎么工作的。

首先通过下面这段代码,我们在action中生成了一个dataProvider可以提供给view中的widget调用

$userData = new CActiveDataProvider('User', array(
    'pagination'=>array(
            //所以关于pagination的设置都可以在这里进行
            'pageSize'=>10, 
    ),
    'sort' => array(
        //所以关于csort的设置都可以在这里进行
        'defaultOrder' => 'username'
    )
));


然后,我们可以在view中调用CGridView widget

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $userData,
    'columns' => array(
        'id', 
        'username', 
        'fullname', 
        array(
            'dataField' => 'email',
            'dataExpression' => 'CHtml::mailto($data->email)'
        ), 
        'last_login',
        array('class' => 'CRudColumn', 'header' => '操作')
    ),
));?>

代码中我们看到了dataProvider这个属性使用了$userData变量。 在columns属性中我们对需要显示的字段和显示方式做了一定的设置: 在这里我们要求显示 'id', 'username', 'fullname', 'email', 'last_login' 几个字段.

在email字段中,我们使用了具体设置,用表达式的方式为email制作了链接效果。 在表达式中我们可以用:
$grid (当前gridview实例),
$row(当前行,index从0开始计算),
$data(当前行的model实例),
$this(当前列的实例)。

在最后我们用CRudColumn生成了操作列, 可以实现查看,修改,删除操作。

看下效果吧
GRIDVIEW

默认的column类型为CDataColumn, 其他我们暂时还能选择CCheckBoxColumn, CLinkColumn和CRudColumn, 相信以后还会提供更多的类型。

关联文章:

  1. Yii: Just another way to use GridView
  2. Yii 1.1 新元素 CForm
  3. 教程翻译:用 Yii Framework 编写博客 – 11

评论 (8) 引用 (0)
  1. 请问一下
    我添加这个gridview以后那个删除操作不能进行
    有什么需要特别设置的吗?

  2. 首先确认你的程序里有没有delete这个action,如果action名字不是delete可以使用deleteButtonUrl 参数来修改删除操作的路径。 由于gridview里都是使用ajax方法,所以你的delete函数也需要作相应的改变

  3. 感谢你的回复。
    我的delete是crud的时候生成的actiondelete
    在crud生成的页面上面是可以删除的。
    根据您的回单,是我应该改写这个delete函数才可以是吧?
    默认的delete方法不能够执行这个操作。
    再次感谢您的回复,谢谢。

  4. 大概是我没表达清楚, gridview使用ajax调用delete方法,而你crud生成的delete方法应该用的是普通的post/get然后redirect的方式,你可以再建立一个ajax delete方法来支持gridview的ajax调用

  5. 谢谢。
    明白了,是默认crud的方法不支持ajax调用必须写一个支持Ajax调用的方法是吧。
    应该是如下的格式。
    public function actionDelr(){
    $confirmation
    $.ajax({
    type: ‘POST’,
    url: $(this).attr(‘href’),
    success: function() {
    $.fn.yiiGridView.update(‘{$this->grid->id}’);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
    alert(XMLHttpRequest.responseText);
    },
    });
    return false;

    }

  6. 非常感谢您的回复。
    您的意思是默认的crud生成的delete方法是不能够由gridview来调用的。
    可是我不会写Ajax delete方法。您能不能给个例子。
    另外:如果使用默认的crud方法在firefox里面是可以执行的。
    在IE7里面无法执行。
    请指点。
    给您添麻烦了。

  7. 刚才我试了下,普通的delete应该也没问题, 下面是我自己的delete action

    public function actionDelete() 
    {
        if (Yii::app()->request->isPostRequest) {
            $this->loadUser()->delete();
            $this->redirect(array('user/index'));
        }
    }

    我想你不能删除的原因应该是没有设置对url,具体问题你查看下你的出错信息

  8. 非常感谢。问题处理了,才来回复
    一个是IE的问题还有一个是我的服务器也有问题。
    感谢你的回复。


发表评论


还没有引用.