Bom dia a todos,
Atualizando …
Despois de muito custo consegui atualizar a GridView com um novo DataProvider. (abaixo vou explicar como fiz)
Agora preciso de ajuda para conseguir enviar o DataProvider ativo da View -> Controller.
Já li algo sobre usar Session, mas estou com dúvidas e não sei se é bom.
Outra opção seria fazer um Foreach na View, "desconstruindo" o Array em vários campos ocultos na página. Assim eu poderia recuperá-los através do $_POST dentro do Controller.
O que é melhor fazer ? Existe outra opção ?
Abaixo segue a explicação de como atualizar uma CGridView a partir de um novo DataProviderArray, quando se clica em algum botão ajax.
Na minha View Principal, tenho um botão Adicionar Itens:
<script>
        function allFine(data) {
                $("#div_itens").html(data);
        }
</script>
		<?php $this->widget('bootstrap.widgets.TbButton', array(
			'icon' => 'icon-plus',
			'size' =>'medium',
			'type' => 'warning',
			'buttonType' => 'ajaxLink',
			'url' => $this->createUrl('addItem'),
			'ajaxOptions'=>array('type'=>'POST',
			'success'=>'allFine', 
						),
			
		)); ?>
No final desta página, tenho o comando abaixo:
<?php echo $this->renderPartial('_griditens', array('dp_itens'=>$dp_itens,)); ?>
Criei uma outra View, "_griditens.php" que contém apenas a GridView dos Itens, pois ela recebe apenas o $dp_itens.
Isso foi importante, para não ter que fazer Render de todos os Models.
Coloquei os botões "Editar" e "Excluir" para manipular os valores do mesmo jeito da Action addItens.
<div class="row-fluid" id="div_itens">
	<div class="span10">		
		<?php 
		$this->widget('bootstrap.widgets.TbGridView',array(
			'id'=>'itens-grid',
			'template'=>"{items}",	
			'dataProvider'=>$dp_itens,
			'type'=>'striped bordered condensed',
			'columns'=>array(
		        array(
			            'name' => 'Produto',
			            'type' => 'raw',
			            'value' => 'CHtml::encode($data["produto"])'
			        ),				
		        array(
			            'name' => 'Qtde',
			            'type' => 'raw',
			            'value' => 'CHtml::encode($data["qtde"])'
			        ),				
		        array(
			            'name' => 'Valor',
			            'type' => 'raw',
			            'value' => 'CHtml::encode($data["valor"])'
			        ),				
		        array(
			            'name' => 'Desconto',
			            'type' => 'raw',
			            'value' => 'CHtml::encode($data["desconto"])'
			        ),				
		        array(
			            'name' => 'SubTotal',
			            'type' => 'raw',
			            'value' => 'CHtml::encode($data["subtotal"])'
			        ),				
				 array(
					'htmlOptions' => array('nowrap'=>'nowrap'),
					'class'=>'bootstrap.widgets.TbButtonColumn',
					'template'=>'{update}{delete}',
					'viewButtonUrl'=>null,
					'updateButtonUrl'=>null,
					'deleteButtonUrl'=>null,				 
                    'buttons'=>array(       
                                'update' => array(
                                  'url'=>'Yii::app()->controller->createUrl("editItem", array("id"=>$data["id"]))',
                                ),
                      			'delete' => array(
                                  //'url'=>'Yii::app()->controller->createUrl("ports/delete", array("id"=>$data[id],"command"=>"delete"))',
                                ),
                         	),				 
				),
			),
		)); 
		?> 
	</div>
</div>	
No meu controller, tenho a Action que é chamada:
	public function actionAddItem()
	{
	    if(!empty($_POST))
               // se precisar fazer um loop em vários campos do $_POST, usar este comando
	       //while(list($key, $val) = each($_POST)) {
	   	  //echo $key."=".$val."<br>";  // so para ver os valores, nao é necessario
	       //}
	   		
               // Cria um novo model limpo, da tabela itens
               $model_itens_add=new Compras02;
	       $model_itens_add->unsetAttributes();
	       $produto = $_POST['searchproduto'];
	       $model_itens_add->id_produto 	= $_POST['add_id'];
	       $model_itens_add->qtde 		= $_POST['add_qtde'];
	       $model_itens_add->desconto 	= $_POST['add_desc'];
	       $model_itens_add->valor 		= $_POST['add_valor'];
				
               ////////////////////////////
               // NESTE PONTO PRECISO TER O DATAPROVIDER ATUAL, PARA JUNTAR COM O NOVO REGISTRO
               ////////////////////////////
		// Dados do GridView
		$rawData=array(
			array('id'=>1, 
				  'produto'=>$produto, 
				  'qtde'=>$model_itens_add->qtde, 
				  'valor'=>$model_itens_add->valor, 
				  'desconto'=>$model_itens_add->desconto, 
				  'subtotal'=>($model_itens_add->qtde * $model_itens_add->valor) - $model_itens_add->desconto,
				  ), 
		);
		
       // Criando o novo Array para a Tabela GridView	 
       // or using: $rawData=User::model()->findAll();
       $dp_itens=new CArrayDataProvider($rawData, array(
           'id'=>'id',
           'sort'=>array(
               'attributes'=>array(
                   'produto',
               ),
           ), 
           'pagination'=>array(
               'pageSize'=>15,
           ),
       ));
		
                // Nao é necessário, deixei aqui pra testar depois o merge de arrays
                // Fazendo um Merge dos Arrays
		//$data = $dp_itens->getData();
		//$data[] = $model_itens_add;
		//$dp_itens->setData($data);		
		// Devolvendo os valores para a página		
		 $this->renderPartial('_griditens',array(
			 'dp_itens'=>$dp_itens,
		 ));		
	}
Espero que seja útil para alguém !!!
Coloquei a tela em anexo para vocês verem como ficou. Lógico que ainda falta formatar os campos valores e etc.