Voici un gridview qui contient un tree view pour plier et deplier les lignes
il faut que dans la source de donnee il y ai un colonne expandable, qui definit que cette ligne a des enfants
il faut egalement un colonne level qui definit le niveau hierarchique
les sources en pieces jointe contient un script de creation de table plus les donnees
J'ai implente du call back sur le bouton + et -, il n'y a pas de traitement particulier, mais servira surement dans une evolution
J'ajoute également des variables au code javascript depuis le code behind
Source / Exemple :
/*
function TreeViewButtonReceiveData(arg, context) {
if (context.firstChild == null) {
context.value = arg;
}
else {
context.firstChild.nodeValue = arg;
}
}*/
function Test111() {
alert('ca marche');
}
function TreeViewButtonReceiveData(arg, context) {
var index = parseInt(arg);
index++;
var imageColumn = 0;
var disp = '';
var collapse = false;
//ce n'est pas un plus ou un moins on ne traite pas
if (context.rows[index].cells[imageColumn].firstChild.src != plus &&
context.rows[index].cells[imageColumn].firstChild.src != minus)
return;
if (context.rows[index].cells[imageColumn].firstChild.src == plus) {
disp = 'inline';
context.rows[index].cells[imageColumn].firstChild.src = minus;
collapse = false;
}
else {
disp = 'none';
context.rows[index].cells[imageColumn].firstChild.src = plus;
collapse = true;
}
var level = parseInt(context.rows[index].cells[levelColumn].innerText);
for (var i = index + 1; i < context.rows.length; i++) {
var currentRow = context.rows[i];
if (parseInt(currentRow.cells[levelColumn].innerText) <= level
|| parseInt(currentRow.cells[levelColumn].innerText) == 0) {
break;
}
processRow(currentRow, level, collapse, plus, minus, imageColumn, levelColumn, expandableColumn);
}
}
function processRow(currentRow, level, collapse, imgPlus, imgMinus, imgColmun, levelColumn, expandableColumn) {
if (collapse == false) {//on extend
if (parseInt(currentRow.cells[levelColumn].innerText) == level + 1) {
if (currentRow.cells[expandableColumn].innerText == "True") {
//on met un plus
currentRow.cells[imgColmun].firstChild.src = imgPlus;
currentRow.cells[imgColmun].firstChild.style.display = 'inline';
currentRow.cells[imgColmun].firstChild.style.visibility = 'visible';
}
else {//on rend la ligne simplement visible
currentRow.cells[imgColmun].firstChild.style.display = 'inline';
currentRow.cells[imgColmun].firstChild.style.visibility = 'visible';
}
currentRow.style.display = 'inline';
}
}
else {//collapse
if (parseInt(currentRow.cells[levelColumn].innerText) >= level + 1) {
if (currentRow.cells[imgColmun].firstChild.src == imgPlus)
currentRow.cells[imgColmun].firstChild.src = imgMinus;
currentRow.cells[imgColmun].firstChild.style.display = 'none';
currentRow.style.display = 'none';
}
}
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.