Gridview with treeview and callback

Description

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';
        }
    }
}

Codes Sources

A voir également

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.