crescent 2012-07-20 13:09:55 3399次浏览 6条回复 0 0 0

我用的MySQL数据库,数据库编码为 utf8。

我的model里通过sql语句查询,把结果放在了 CActiveDataProvider里,页面使用 CGridView,能正常显示。

但如果我将数据从 CActiveDataProvider里取出来,即 CActiveDataProvider->getData(),然后进行修改,再将数据插入,即 CActiveDataProvider->setData(),则页面就显示乱码,并且页面只剩下文字,其他任何的效果包括CGridView的效果都没有了。

乱码的问题我试了改变firefox的编码为utf8能解决,但页面效果不知为什么就没有了,求助~~~

  • 回复于 2012-07-20 14:32 举报

    CActiveDataPicker是啥...

    你怎么改的,贴代码吧。

  • 回复于 2012-07-20 15:52 举报

    囧,我写错了。是CActiveDataProvider...
    我是这样改的:

    $activeDataProvider = new CActiveDataProvider('QuerySource', array(
         'criteria'=>$criteria,
         'pagination'=>false,
    ));
    $dataArray = $activeDataProvider->getData();
    
    // 我数据库中select出的是三个字段 type1,type2,type3
    $dataArray[ 0 ] = array( 'type1'=>1, 'type2'=>2, 'type3'=>3 );
    $activeDataProvider->setData($dataArray);
    
    return $activeDataProvider;
    

    有没有可能是编码问题?

  • 回复于 2012-07-20 16:12 举报

    不是编码的问题,我以前在论坛里见过类似的问题,你自己找找。

    $activeDataProvider->getData();得到的东西很多,相对应的setData里面的的array的结构也应该和getData里面得到的结构是一样的吧。这个是我的理解,不知道是否正确。

    你试试这样
    $dataArray[ 0 ] ['type1']= '1';
    $dataArray[ 0 ] ['type2']= '2';
    $dataArray[ 0 ] ['type3']= '3';
    然后再setData

  • 回复于 2012-07-20 17:29 举报

    果然就可以了。。。好神奇。。谢谢哇!!!

  • 回复于 2012-07-20 17:51 举报

    不知道哪里能看到这个 getData() 得到的内容的整个结构???我看文档看只是一个array。
    因为如果我想自己新建一个然后 setData(),就不行嗯。

  • 回复于 2012-08-17 10:00 举报

    观察中 我也想了解这个问题

您需要登录后才可以回复。登录 | 立即注册