Yii:对动态列进行排序和格式化

neo*_*yte 6 sql-server sorting gridview dynamic-sql yii

我使用CSqlDataProvider从动态SQL查询中显示CGridView中的数据.有一些静态和一些动态列.现在我想在动态列中做一些像货币这样的特殊格式.但是,如果在执行查询之前我不知道列的数量/名称,我该怎么做呢.

此外,我希望能够对动态列进行排序,并且我有同样的问题,我没有所有的列名称.

在使用动态查询和gridview之前的任何人.请指点我正确的方向或提出一些想法如何做到这一点.

简而言之,我能够在gridview(也是动态行)中成功显示数据并对所有静态列进行排序.只需要对动态行进行排序并格式化动态和静态列

GridView的代码:

$tdata=$dataProvider->getData();
//Calculation to get column names
$grid_columns = array_keys($tdata[0]);

foreach($grid_columns as $i=>$ii)
{
//Applying Formula to get Total Row
$grid_final[$i] = array('name'=>$ii,'class'=>'bootstrap.widgets.TbTotalSumColumn'); 
}
//Grid View
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
'sortableRows'=>true,
'afterSortableUpdate' => 'js:function(id, position){ console.log("id: "+id+", position:"+position);}',
'dataProvider'=>$dataProvider,
'type'=>'striped bordered',
'template' => "{items}\n{extendedSummary}",
'columns'=> $grid_final, 
 ));
Run Code Online (Sandbox Code Playgroud)

控制器代码:

public function actionIndex()
{

     if(isset($_GET['month']))
     {

       $month=$_GET['month'];
     }
     else
      {
       $month= 7;
      }
   //SQL Query with Dynamic Columns      
    $sql = "SELECt ABC,X,Y,Z, @Column_Names
            FROM some_table
            WHERE [month] = :month";

$connection=Yii::app()->db;
$command=$connection->createCommand($sql);
$command->bindParam(':month',$month,PDO::PARAM_STR);
$dataProvider=new CSqlDataProvider($sql,array('keyField' => 'ABC','params' => array(
              ':month' => $month,
               ),'sort' => array(
              //Here how do i put column names which i don't know yet for sorting
                 'attributes' => array(
                    'ABC','X','Y','Z' )),'pagination'=>false));
    $this->render('index',array('dataProvider' => $dataProvider, 'month' => $month));
}
Run Code Online (Sandbox Code Playgroud)

ale*_*007 0

我在 Yii 中创建动态列,如下所示:

  1. 在 some_table 模型中,我们将其命名为 SomeTable,我声明最大数量的列名,如下所示:

    公共$column1,$column2,$column3,$column4;

  2. 我在该模型中创建一个函数,我们将其命名为“search()”来构建 dataProvider,就像您的逻辑状态一样,但我确保 @Column_Names 看起来像这样:

    var_column1 作为column1,var_column2 作为column2,等等。

  3. 在validation()中,声明所有这些列在“搜索”上是安全的
  4. 构造一个由合并 model->attributes 和所有声明的列及其选项形成的列数组,并将其分配给视图,就像使用 $grid_final 变量一样

这里唯一的缺点是您需要知道最大列数,当然,如果您有包含分配列的表,则声明变量分配是一个大问题。