2013-02-23 67 views
3

是否有任何方式来设置初始排序CGridView? 我有一个数据库表,其中包含:id |名称|描述| create_time ... 在我的CGridView我希望我的数据显示没有id(这可以通过在CGridView中设置列来完成,但我想知道是否有任何其他方法从dataProvider中消除此字段),我想让我的数据按名称ASC排序。我怎么能做到这一点,因为它总是排序后id和我不能设置一个标准的CGridView?yii CGridView初始排序

+0

CGridView只显示排序后的数据。你必须在你的查询中排序(通常是一个'CActiveDataProvider')。如果您已经使用Gii作为脚手架,那么您的模型的“搜索”方法就是查询所在的位置。这里有一个例子:http://www.yiiframework.com/doc/api/1.1/CActiveDataProvider – adamors 2013-02-23 10:51:46

回答

4

您可以在模型中分别定义默认订单CActiveDataProvider。以下片段默认按列SortMeColumn排序。

public function search() 
{ 
    $criteria = new CDbCriteria; 
    $criteria->compare('ID', $this->ID, true); 
    $criteria->compare('SortMeColumn', $this->SortMeColumn, true); 

    return new CActiveDataProvider($this, 
     array(
      'criteria' => $criteria, 
      'sort' => array(
       'defaultOrder' => array(
       'SortMeColumn' => CSort::SORT_DESC 
      ), 
      ), 
     )); 
} 

查看CSort仅供参考。

+0

非常好的答案。但是,如果我并不总是希望将此订单用作默认订单,我应该怎么做?如果我有另一个需要在ID之后默认排序的页面,我该怎么办? – tzortzik 2013-02-23 15:42:47

+0

@tzortzik:在这种情况下,以任何您喜欢的方式将'defaultOrder'的'array'作为参数传递。 – Kai 2013-02-23 16:23:48

+1

我认为这意味着重载搜索功能为'公共功能搜索($ arrDefaultOrder)' – tzortzik 2013-02-23 16:35:53