Laden...

Dynamische Größenänderung bei Image Controls

Erstellt von dr_d00m vor 15 Jahren Letzter Beitrag vor 15 Jahren 899 Views
dr_d00m Themenstarter:in
43 Beiträge seit 2008
vor 15 Jahren
Dynamische Größenänderung bei Image Controls

Hallo zusammen!
Ich hab folgendes Problem: Ich benutze ein WebControl namens ChartDirector, welches mir Images auf meiner Webseite erstellt, die Charts nach bestimmten Kriterien darstellen. Der Charttyp den ich hier benutze ist ein Gantt-Cahrt um Termine darzustellen.
Nun befindet sich auf der Seite auch noch ein TreeView. Dieses bestimmt, welche Daten im ChartDirector angezeigt werden, da jedem Objekt im Baum auch Termine zugeordnet werden können. Und zwar soll der ChartDirector für jeden angezeigten Knoten im Baum auch eine Zeile im Gantt-Chart anzeigen.
Soweit die Ausgangssituation. Nun habe ich folgendes Problem: Der Baum wird natürlich mit jedem geöffneten Knoten größer. Um dem User die Übersicht zu vereinfachen möchte ich das Image des Gantt-Chart nun an die Größe des des TreeView anpassen. Dazu habe ich mir eine JavaScript Funktion geschrieben, die ein hidden Input setzt, welches ich mit runat="server" betreibe und so serverseitig abrufen kann.
Hier mal die JavaScript Funktion:


function setTreeSizeInput() {
        var treeId = getTreeId();
        var tree = document.getElementById(treeId);

        var hiddenInputId = getTreeSizeInputId();
        var hiddenInput = document.getElementById(hiddenInputId);
        hiddenInput.value = tree.offsetHeight;        
    }

Die Funktionen getTreeId() und getTreeSizeInputId() sind Funktionen, die ich mir im Code-Behind definiert habe und die mir die ClientIds der einzelnen Server-Controls zurückgeben.


Page.ClientScript.RegisterStartupScript(this.GetType(), "TreeIdScript", 
                "function getTreeId(){return \"" + this.treeViewScheduler.ClientID + "\";}" + 
                "function getTreeSizeInputId(){return \"" + this.TreeSize.ClientID + "\";}", 
                true);
            Page.ClientScript.RegisterStartupScript(this.GetType(), "startSizeScript", "", true);

Will ich nun im Code-Behind auf die Größe des Baumes zurgreifen, brauche ich nur den value von TreeSize abfragen. Soweit die Theorie.
Ich benutze das TreeNodeExpanded Event des TreeView, um meinen Chart zu aktualisieren. Leider ist zu diesem Zeitpunkt mein hidden input noch nicht aktualisiert und somit wird mir immer die Größe beim letzten Durchlauf angezeigt.
Kennt jemand einen Weg, um diesen Fehler zuumschiffen?

Mein zweites Problem ist, dass ich kein Pendant zum TreeNodeExpanded Event auf Javascript Seite habe. Heißt ich kann die Funktion nicht immer dann aufrufen, wenn mein TreeNode sich ändert. Ich habs hier schon mit window.onload und window.onchange versucht, aber in beiden Fällen wird die Funktion nur im Fall des ersten Ladens aufgerufen. Weiß jemnad auch hierfür eine Lösung?

Danke schonmal vorab und Gruß

dr_d00m

dr_d00m Themenstarter:in
43 Beiträge seit 2008
vor 15 Jahren

Hallo.
Ich hab jetzt einen anderen Weg gefunden. Ich habe den einzelnen TreeNodes über CSS feste Höhen zugewiesen und kann so die Höhe des Charts bestimmen. Ich gehe dazu alle die Nodes rekursiv durch und addiere für jede Node dessen "Expanded"-Eigenschaft true ist die feste Höhe hinzu. Fertig 😉

Vielleicht kanns ja mal irgendwer gebrauchen...