CGridView selectionChanged récupérer autre chose que l'ID

Bonjour, j’ai la GridView ci-dessous. Je souhaiterai avec ma fonction dans “selectionChanged” obtenir l’attribut de mon choix correspondant à la ligne sélectionné. Aujourd’hui je n’arrive à récupérer que l’ID de l’objet sélectionné




$this->widget('zii.widgets.grid.CGridView', array(

					'id'=>'tiers-grid',

					'dataProvider'=>$listeTiers,

					'filter'=>$tiersSearch,

					'selectionChanged'=>" function(id) {

								$('#Tiers_id').val($.fn.yiiGridView.getSelection(id));

							}",

					'columns'=>array(

							array(

									'header' => 'Id Tiers',

									'name' => 'tiers.id',

							),

							array('name'=>'type','filter'=>false),

							'nom',

							'adresse1',

							'adresse2',

							'code_postal',

							'ville',

							'pays',

							'departement',

					),

			));



J’ai trouvé en le faisant à la main en JavaScript en parcourant le DOM comme ça




'selectionChanged'=>" function(id) {

				$('#Tiers_id').val($('#tiers-grid table tbody .selected').children()[0].innerHTML);

			}",



En modifiant children()[0] par children()[1] ou children()[2] etc, on accède à chacune des colonnes du tableau.

Personnellement je préfères rendre le code indépendant de ce qui est dans le tableau et au moins de l’ordre de ce qui est dans le tableau.

Plusieurs techniques se proposent:

  • Definir une classe sur les elements de la colonne et faire un filtrage sur la classe, plutôt que de choisir le 1ière colonne par exemple;

  • Faire de “#Tiers_id” un “drop-down” et sélectionner le bon élément à partir de l’id.

  • Utiliser de l’ajax pour mettre à jour ‘#Tiers_id’.

Ta première solution me semble la meilleure en ce qui me concerne mais comment fait-on pour spécifier une classe aux colonnes de CGridView ?

Il faut juste ajouter cela dans le ‘htmlOptions’ du champs concerné:


          'htmlOptions'=>array('class'=>'tiersid'),

Il y a également un ‘headerHtmlOptions’, etc.

De plus cela permet aussi une mise en forme différente.