【发布时间】:2014-09-07 22:59:46
【问题描述】:
我在 CGridView 中显示来自使用 CSqlDataProvider 的动态 SQL 查询的数据。有一些静态的和一些动态的列。现在我想在动态列中做一些特殊的格式,比如货币。但是,当我在执行查询之前不知道列的编号/名称时,我该怎么做。
我还希望能够对动态列进行排序,但我又遇到了同样的问题,即我没有所有列名。
以前使用过动态查询和网格视图的任何人。请指出正确的方向或提供一些想法。
简而言之,我能够成功地在 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,
));
控制器代码:
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));
}
【问题讨论】:
-
你能再贴一些代码吗?
-
@user3265427 添加了控制器代码..还查看代码扩展..我已经显示了网格中列的变量 $grid_final 的计算
-
@user3265427 您需要更多信息吗?
-
抱歉,我想我没有找到解决方案。我以为有一个别名可以按数字访问列,例如:c1、c2、c3,但找不到了。
-
是否可以查询表并仅获取列名..所以我之前运行此查询以获取列名..然后执行主查询..
标签: sql-server sorting gridview yii dynamic-sql