jeudi 15 juillet 2010

Utilisation d'un RadTreeview dans un RadComboBox

Dans le cadre d'un projet sous DNN, j'ai dû utiliser les contrôles Telerik, notemment un RadComboBox contenant un RadTreeview, celui-ci étant chargé dynamiquement. Je me suis trouvé confronté au problème suivant : à la sélection d'un node du treeview, je souhaitais afficher dans la combobox le libellé de l'élément sélectionné.

On trouve sur le site de Telerik (éditeur de ces contrôles) pas mal d'exemples de ce type, la réponse passe par du code javascript exécuté lors du click sur le node, voici un exemple de code à mettre en place :

function nodeClicking(sender, args)
{
var comboBox = $find("RadComboBox1");

var node = args.get_node();

comboBox.set_text(node.get_text());

comboBox.hideDropDown();
}


Comme vous pouvez le constater dans ce script, le nom de la combobox est connu. Mais dans le cas d'une utilisation sous DNN, le problème est légèrement différent.

En effet, nous pouvons trouvez plusieurs modules utilisant ce fonctionnement sur une même page et dans ce cas, le nom de la combobox change bien entendu. Il faut donc procéder autrement. Nous n'utiliserons plus la fonction $find, il faut ici récupérer la combobox parente du treeview à l'origine de l'appel à la fonction nodeClicking. Voilà ce que nous pourrions avoir :


function nodeClicking(sender, args)
{
//Récupération du client Id du treeview à l'origine de l'appel
var treeviewId=sender.get_id();
//Ce Client Id contient le nom de la combobox parente
//On récupère sa position dans le client Id du treeview (ici l'Id serveur de la combobox est "RadComboBox1")
var index=treeviewId.lastIndexOf(""RadComboBox1"");
//Récupération du client Id de la combobox parente, le 12 correspond à la longueur de l'Id serveur de la combobox
var comboBoxId=treeviewId.substring(0,index+12);

//Récupération de l'instance de la combobox
var comboBox = $find(ClientID);

var node = args.get_node();

comboBox.set_text(node.get_text());

comboBox.hideDropDown();
}



Voici les deux liens qui m'ont permis de rédiger ce billet :
http://www.telerik.com/community/forums/aspnet-ajax/treeview/radcombobox-radtreeview-loadondemand.aspx
http://www.telerik.com/community/forums/aspnet-ajax/combobox/access-radtreeview-parent-control.aspx

1 commentaire:

  1. Merci, c'est tout-à-fait ce que je cherchais ! Et ça fonctionne à merveille :)

    RépondreSupprimer