我正在尝试构建一个表单,使用户能够更改多行的值,然后单击“提交”。我能够从数据库中检索行并将它们显示在表中。但是,而不是文本字段。我希望他们成为候选名单。
$list
包含我想为每一行的下拉列表显示的选项。
我错过了什么?
<div class="row bottom">
<?php
$list = CHtml::listData(Attendancetype::model()->findAll(), 'AttendanceTypeID', 'AttendanceTypeName');
print_r($list);
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=> $model->search(),
'columns'=>array(
'CalendarDate',
'GradeName',
array(
'value'=>'$data->TeacherFirstName . " " . $data->TeacherLastname',
'header'=>'Teacher'
),
array(
'value'=>'$data->FirstName . " " . $data->LastName',
'header'=>'Student'
),
array(
'value'=>$list,
'type'=>'raw',
'header'=>'Status'
),
),
));
?>
</div>
当前错误消息。
PHP warning
call_user_func_array() expects parameter 1 to be a valid callback, array must have exactly two members
C:\wamp\www\yii\framework\base\CComponent.php(611)
599 * @since 1.1.0
600 */
601 public function evaluateExpression($_expression_,$_data_=array())
602 {
603 if(is_string($_expression_))
604 {
605 extract($_data_);
606 return eval('return '.$_expression_.';');
607 }
608 else
609 {
610 $_data_[]=$this;
611 return call_user_func_array($_expression_, $_data_);
612 }
613 }
614 }
615
616
答案 0 :(得分:2)
只是添加到上一个答案。如果要使用外部变量,则需要在CColumn中定义它。 所以你的代码看起来像:
$list = CHtml::listData(Attendancetype::model()->findAll(), 'AttendanceTypeID', 'AttendanceTypeName');
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=> $model->search(),
'columns'=>array(
....
array('header'=>'Action',
'type'=>'raw',
'value'=> function ($data,$row) use $list {return CHtml::dropDownlist('actionList','', $list,array());}
),
这将按您的需要工作。与Ninad的答案相同。 Cgridview是最灵活的yii小部件,并且有很多wiki示例。
答案 1 :(得分:1)
尝试在cgridview中执行此操作
array('header'=>'Action',
'type'=>'raw',
'value'=>"CHtml::dropDownlist('actionList','', CHtml::listData(
Attendancetype::model()->findAll(), 'AttendanceTypeID', 'AttendanceTypeName'),array())"
),