Treview e reload

di il
15 risposte

Treview e reload

Buonasera,
Ho un problemino che mi sta rallentando parecchio, magari qualcuno di voi lo ha gia affrontato, vado al dunque:
su un treeview io ho la necessità di eliminare o nascondere un nodo ma poi ho la necessità di richiamare quel nodo e tutti quelli che ho cancellato come erano all'avvio del form, qualche suggerimento?
grazie mille

15 Risposte

  • Re: Treview e reload

    Come popoli la treeview ? qual'è la tua difficoltà ? nascondere il nodo o ripristinarlo ? Se non mostri il codice che stai usando sarà impossibile aiutarti
  • Re: Treview e reload

    Buongiorno,
    Visto che si tratta di un menu e quindi praticamente con voci statiche che vanno escluse o incluse in base all'utente che si logga le voci sono state aggiunte dall'editor standar e non da codice, in seguito se ad esempio mi loggo con l'uente con permessi inferiori e voglio nascondere una vose attualemnete utilizzo questo script: FrmMain.TreeViewMenu.Nodes(0).Nodes("NodoArticoli").Remove() ovviamente cosi rimuovo il nodo e avrei bisogno di richiamare tutta la struttura appena innesto la condizione del livello più alto per ripristinare tutto il treeview come quando viene creato il form.
    non ho trovato come effettuare una proprietà hide o visible e quinidi sono bloccato li.
    Grazie mille
  • Re: Treview e reload

    Potresti popolare la TreeView da codice tramite una datatable e ripristinarla da quella dopo aver fatto i vari remove
  • Re: Treview e reload

    No non è quello che posso fare, nel caso il servizio andasse in down l'utente non potrebbe fare alcuna azine da menu che invece ora è fattibile, mi serve un idea sul menu ad albero oppure un menu simile, poi neanche crearla da xml perche potrebbe essere suscettibile di variazioni dall'esterno, mi serve qualcosa di più sicuro come il treeview menu
  • Re: Treview e reload

    pieroalampi ha scritto:


    nel caso il servizio andasse in down .....
    non capisco cosa intendi
  • Re: Treview e reload

    Allora se parte il servizio sql il menu a questo punto funzionerebbe altrimenti no e perderei in ogn caso la possibilità di rialzare il servizio da menu o dovrei sconvolgere l'organizzazione dello sytesso e la cosa non conviene anche perche l,'ho già analizzato, avrei voluto trovare una soluzione per richiamare la procedura già in essere cioe richiamare in qualche modo la ricostruzione del menu creato tramite l'editor.
    L'alternativa che avrei voluto evitare ma visto che non si trova opzione è creare una funzione che crea il menu ogni volta che apro il software e cioè al form load, eliminare le voci tramire il revove quando non mi servono e ripristinate il treeview richiamando la funzione da me creata ogni volta che serve. MA NON VOLEVO ARRIVARE A QUESTO cercavo una soluzione su quanto scritto sopra e cioe ricostruire il menu creato mediante l'edito ogni volta che mi serve farlo. Spero esser stato esaustivo questa volta. Grazie mille
  • Re: Treview e reload

    Salve, giusto my $ 0.02...

    pieroalampi ha scritto:


    Allora se parte il servizio sql il menu a questo punto funzionerebbe altrimenti no e perderei in ogn caso la possibilità di rialzare il servizio da menu o dovrei sconvolgere l'organizzazione dello sytesso e la cosa non conviene anche perche....
    • se parte il servizio sql il menu a questo punto funzionerebbe
    il servizio NON dovrebbe partire... dovrebbe essere GIA' IN FUNZIONE...

    in ogni caso, se il servizio non dovesse partire, non credo potresti fare molto con il tuo applicativo basato su un db...
    • e perderei in ogn caso la possibilità di rialzare il servizio da menu
    per "rialzare" un servizio SQL Server che e' stato shut down o che e' caduto (non l'ho mai sperimentato ) sono necessari privilegi amministrativi... e, "anche se", non lo metterei mai in un menu applicativo... nessuno dovrebbe interagire con l'OS o con SQL Server con privilegi amministrativi, siano essi di dominio/OS o di database se non per specifiche attivita' amministrative e sicuramente mai per attivita' correnti/interattive... quindi, quella eventuale voce di menu, "Avvia Servizio...", secondo me "non dovrebbe esistere"

    poi, personalmente leggerei il menu dalla base dati in relazione con i privilegi dell'utente, oppure, se vuoi permettere un escalation di privilegi perche' ad esempio l'applicativo e' un point of sale dove "tutti si loggano" senza uscire dalla propria login OS e quindi tendenzialmente ti basi su una SQL Server Authentication, che ti permetterebbe appunto di verificare che l'utente X non ha privilegi per la funzionalita' A, ma cambiando le credenziali al volo con un login form consenta all'amministratore che si trova a passare li' di fianco di superare la validazione sedendosi al tavolo, fornendo le sue credenziali, accedendo alla funzionalita', ritornare al menu iniziale e fare il revert di autorizzazione all'utente X, allora potrebbe anche avere senso avere TUTTO il menu completo
    se invece vuoi popolare il menu dopo la validazione delle autorizzazioni ma mantenere in "cache" il menu completo, come gia' ti hanno indicato, o filtri la "lista" delle opzioni non disponibili caricando manualmente il menu, o al limite, di nuovo, ti tieni la cache di tutte le opzioni per ripopolare la lista attiva, o cose simili... direi che ci sono svariati modi...

    personalmente, continuo comunque a non capire

    ripeto, my $ 0.02
    salutoni
    --
    Andrea
  • Re: Treview e reload

    Si sicuramente non hai capito, perche parti da un principio diverso e cioe che il servizio se cade non lo puoi rialzare dal software cosa non vera, in ogni caso tutto il resto che hai scritto, proviene nel caso dovessi adottare la politica per popolare il menu da sql. Onestamente mi sarei aspettato altre cose come "popolalo da un xml" ma vedo che si insiste su qualcosa li dove non hai garanzie certe di ripristino da parte dell'operatore. Io personalmente invece preferisco dare la possibilità di rialzare un servizio se non stà sù da utenza amministrativa ovviamente, ma anche se cosi non fosse con una procedura di controllo verificherei di non alzare qualcosa che già è su, ma sono opinioni su politiche di produzione e stili di programmazione. Comunque non era quella la mia richiesta di aiuto, era altro e siamo lontani. MA è stato anche interessante capire se ero l'unico a non riuscire a trovare la soluzione precisa a questo problema, ne consegue quindi di non essere l'unico perchui vado per la seconda mia possibilità, cioe di scrivere il menu nel codice e avere sempre la possibilità di rialzare un servizio se va in down senza dover scomodare inutilmente per una cosa a volte scema il programmatore o sistemista cioe premere avvio su un servizio qualora fosse solo quello il problema.

    Inoltre corre l'obbligo di rispondere ad alcune affermazioni quali:
    il servizio NON dovrebbe partire... dovrebbe essere GIA' IN FUNZIONE... OVVIAMENTE DOVREBBE ESSERLO MA ALTRETTANTO OVVIO E' FREQUENTE VEDERE UN SERVIZIO CHE NON RIPARTE DOPO UN UPDATE AD ESEMPIO A QUEL PUNTO CHE FA L'UTENTE CHIAMA IL TECNICO??? VOGLIO DARE UN SERVIZIO COMPLETO O QUASI

    Punto due poi mi fermo perche devo lavorare:
    "rialzare" un servizio SQL Server che e' stato shut down o che e' caduto (non l'ho mai sperimentato ) TI RISPONDO: appunto prova a rialzarlo vedrai che si fa!!! ed è importante che l'utente capisca cosa succede e come comportarsi specialmente se tu programmatore e tecnico hai una distribuzione di 200 punti ma anche solo di 10 punti. Se dopo un update ed un riavvio un servizio sql non va in UP lo fai rialzare dall'utente cosi istruisci la persona hai meno lavoro per cretinate e ti puoi concentrare di più su cose importanti, inoltre ritengo importante non farlo fare dalla macchina in automatico per una serie di moti che non sto ad elencare, però ripeto si tratta di stili di programmazione, non ci inventiamo nulla ognuno esce da una scuola diversa con idee diverse giuste o sbagliate che siano, rispetto la tua ideaa ma non la sposo.

    grazie, dai ora meglio concentrarsi sul lavoro credo dopo questo che la discussione sia stata consumanta in modo esaustivo
  • Re: Treview e reload

    Salve,
    non per polemica, ma mi pari un attimino aggressivo...
    poi ovviamente, come ognuno di noi, fai le scelte che meglio preferisci, consapevole delle stesse...

    tornando a SQL Server, al servizio... per me, e ripeto, per me, non e' normale che il servizio cada... e se il servizio cade, sempre personalmente, vorrei capire perche' sia caduto, e non vorrei che il primo utente che passa lo riavvii, anche se capace e con sufficienti privilegi per farlo... se il servizio cade, sempre nelle mie considerazioni, c'e' un problema "piu' serio" rispetto al fatto che l'applicativo che ci interagisce crashi... Non dico che questo sia "il verbo", ma solo che e' la mia personalissima visione... dell'applicativo in se' non mi importa molto, mentre sempre personalmente mi importa tantissimo che i dati gestiti dal servizo del dbms siano corretti sia fisicamente che logicamente, che siano protetti, che non si corrompano, che il servizio che li gestisce sia in salute. Lavoro con SQL Server, e anche con MSDE, dal 99, e anche su macchine di classe client con OS sempre di classe client mi e' successo veramente di rado la caduta di SQL Server... per mia fortuna posso contare le occasioni sul palmo delle mani... Su macchine di classe server con OS server, forse 1 sola volta... Dipendentemente dalle dimensioni della situazione, probabilmente avrei anche dei servizi di monitor per verificare SQL Server stesso per tutto il suo stato di salute', dall'occupazione di memoria, cpu, occupazione disco, fattori di crescita, gerarchia delle query piu' stressanti, ...
    ma forse parliamo di realta' piu' limitate, senza pretesa di sminuirlo, con SQLExpress o realta' simili, dove il database e' un mero contenitore trasparente dei dati e non una realta' applicativa gia' di suo... e questo non vuole essere ne' una critica ne' sminuire la soluzione, solo una constatazione. Ma, sempre personalmente, se il servizio cade, vorrei probabilmente esserne comunque informato per valutare le possibili cause e/o soluzioni...
    A me, nella mia condizione, che il servizio debba essere avviato, tendenzialmente interesserebbe solo nelle situazioni di LocalDB o simili, diversamente il servizio deve partire allo start up del sistema e stare su... puo' cadere l'application server, ma il dbms deve stare su, e con questo gia' sicuramente si capisce da che parte sto come preferenze
    non mi sono mai accadute corruzioni di dati nelle poche volte che cio' e' accaduto, so per certo che lo storage engine e' molto robusto e che l'eventualita' di corruzione e' rara, ma personalmente preferisco sempre evitare.
    e comunque penso tu sappia che so benissimo che basta anche un breve comando NET START e adeguati privilegi per avviare SQL Server...
    Questo, per quanto riguarda il servizio in se'.

    che poi si preferisca popolare un menu da un file locale xml ( che va distribuito per tutte le postazioni ? ) o ottenuto in prima o anche ultima istanza sempre dal db, puo' anche essere valutato, e siamo liberissimi di sbizzarrirci in questo senso, come anche da altri qui sopra indicato...

    e comunque, peace
    salutoni
    --
    Andrea
  • Re: Treview e reload

    Assolutamente pace non volevo sembrare aggressivo assolutamente e non credo di esserlo stato, però a me come programmatore non interessa sapere perche cade un servizio sempre che non sia per colpa mia, comunque la realta di cui parlo assolutamente non la si può definire limitata al contrario delle volte proprio perche sono server con molti ruoli installati a volte nel riavvio capita anche se raramente che un servizio non parta, ma non è quello il problema io mi devo limitare a creare quello che mi viene chiesto in base a quello che vedo ovviamente. il net start è la cosa più ovvia che ovviamente condivido e l'ho semplicemente specificato perche era stato inserito nella discussione come cosa da controllare, a quel punto ho voluto solo specificare che è possibile.
    Ma il punto rimane sempre lo stesso io avevo chiesto se come me qualcuno riscontrava difficolta in una cosa specifica e per quella chiedevo una collaborazione, suggerimento o esempio, nel breve siamo finiti in una discussione completamente diversa che va a toccare stili di programmazione opinioni e che non ha nulla a che vedere con il post, comunque assoutamente se sono sembrato aggressivo chiedo scusa ma non era quello il mio fine PACE FOREVER GRAZIE
  • Re: Treview e reload

    pieroalampi ha scritto:


    io avevo chiesto se come me qualcuno riscontrava difficolta in una cosa specifica e per quella chiedevo una collaborazione, suggerimento o esempio, nel breve siamo finiti in una discussione completamente diversa che va a toccare stili di programmazione opinioni e che non ha nulla a che vedere con il post
    Io ho riletto tutto il thread ma onestamente non sono ancora riuscito a capire quale fosse il problema originale, o almeno non ne sono sicuro: io ho vagamente compreso che si voglia inizializzare una TreeView a cui poi vengono rimossi dei nodi, e che questi nodi vadano ripristinati, ma senza che siano scritti su un file, su un database, su un qualsivoglia storage di qualsiasi tipo, ma potrei non avere assolutamente capito nulla o non capire in fondo qual è la difficoltà reale, quali sono i requisiti, quali sono i limiti.
  • Re: Treview e reload

    Io ho riletto tutto il thread ma onestamente non sono ancora riuscito a capire quale fosse il problema originale, o almeno non ne sono sicuro: io ho vagamente compreso che si voglia inizializzare una TreeView a cui poi vengono rimossi dei nodi, e che questi nodi vadano ripristinati, ma senza che siano scritti su un file, su un database, su un qualsivoglia storage di qualsiasi tipo, ma potrei non avere assolutamente capito nulla o non capire in fondo qual è la difficoltà reale, quali sono i requisiti, quali sono i limiti.
    Ok giusto per correttezza riscrivo anche perche ho risolto adottando un'altra politica e cioe ho fattu tiutto da codice, ma comunque per il forum se si dovesse trovare la quadra sarebbe una cosa buona, mi spiego:
    Azione: creo Form. inserisco treview e con l'editor integrato e imagelist creo voci menu..... poi fatto questo ho la necessita di rimuove alcuni nodi padre o fglio che sia, successivamente nasce la cosa che non mi riesce e cioe richiamare la struttura originale del treview al momento del formload in modo da ripristinarla con un comando rapido, cercando di fare questo riscontro una difficoltà e volevo capire se ero l'unico. la difficolta consiste nel richiamare il componente con la configurazione.
    necessità : eliminare e ripristinare il menu creato da editor.
    limiri : non è possibile sfruttare nodi caricati da db
    Grazie
  • Re: Treview e reload

    In effetti anche io non ho capito, avevo suggerito di popolare la TreeView da codice tramite una datatable e probabilmente Piero ha inteso database. Io intendevo datatable popolata da codice e questa non va mai down. Probabilmente un array di stringhe è preferibile alla datatable.
  • Re: Treview e reload

    Si perdonami ero sul db ma comunque ad ora credo di aver trovato la soluzione anche perche il problema nasceva per evitare di scrivere troppo codice, ma ora è fatta il codice è scritto, le immagini assegnate sia per il nodo aperto che chiuso i remove pure e quando devo ricreare il menu richiamo la struttura con cui l'ho creato, ragazzi un ultima cosa dopo aver postato il codice non si sa mai serva a qualcuno, come si chiude il post ?

    creo un imagelist dove metto delle immaggini
    cosi creo i nodi:
    'Creo le root principale
            TreeViewMenu.Nodes.Add("Anagrafica", "Anagrafica", 0, 1) '0
            TreeViewMenu.Nodes.Add("Documenti", "Documenti", 0, 1)
    
            'creo i figli
            '********************** 0 Anagrafica **********************
            TreeViewMenu.Nodes(0).Nodes.Add("Articoli", "Articoli", 9, 9)
            TreeViewMenu.Nodes(0).Nodes.Add("CliFor", "Clienti Fornitori", 11, 11)
            TreeViewMenu.Nodes(0).Nodes.Add("Pagamenti", "Pagamenti", 18, 18)
            TreeViewMenu.Nodes(0).Nodes.Add("Listini", "Listini", 12, 12)
            TreeViewMenu.Nodes(0).Nodes.Add("RegIVA", "Registro I.V.A.", 16, 16)
            TreeViewMenu.Nodes(0).Nodes.Add("Arc", "Archivio", 20, 20)
            TreeViewMenu.Nodes(0).Nodes.Add("Com", "Comuni", 0, 1)
            TreeViewMenu.Nodes(0).Nodes.Add("RegFat", "Registri Fatture", 0, 1)
            TreeViewMenu.Nodes(0).Nodes.Add("TipArticol", "Tipologie Articoli", 0, 1)
    ovviamente la struttura: ("Art", "Articoli", 1, 2) dove Art è il nome di riferimento, Articoli è la descrizione, 1 è l'immagine 1 della imagelist appena creato il treeview e il 9 riguarda l'immagine che verrà fuori una volta cliccato sul nodo
    'per rimuovere utilizzo questo script:
     FrmMain.TreeViewMenu.Nodes.RemoveAt(0)
    Grazie
Devi accedere o registrarti per scrivere nel forum
15 risposte