Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

TreeView problemcic

[es] :: .NET :: .NET Desktop razvoj :: TreeView problemcic

[ Pregleda: 1181 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pera_kojot_genije

Član broj: 25010
Poruke: 18
*.dynamic.isp.telekom.rs.



Profil

icon TreeView problemcic11.12.2011. u 12:54 - pre 150 meseci
Imam jedan TreeView koji se ucitava u programu na nekoliko mjesta. Problem je sto je klijent/server aplikacija i kada postoji veci broj objekata od kojih se pravi taj treeview onda se sporo to sve ucitava. Ideja za quickfix jeste da kada se jednom ucita to stablo, da se sacuva na nekom mjestu i da ga samo pozivam, da se ne pravi svaki put iz pocetka. Krenuo sam od najprostijeg rjesenja koje naravno ne radi, a glasi otp ovako:

if(TreeViewKojiCuvam == null)
{
NapraviStablo(TreeViewSaKonkretneForme);
TreeViewSaKonkretneForme.ExpandAll();
TreeViewKojiCuvam = TreeViewSaKonkretneForme;
}
else
{
TreeViewSaKonkretneForme = TreeViewKojiCuvam;
TreeViewSaKonkretneForme.ExpandAll();
}

Kada otvorim prvu formu, (tj kada je TreeViewKojiCuvam null), onda se stablo prikaze. E sad, kada otvorim neku drugu formu, ne izbacuje se nista. Program nigdje ne puca niti baca exception, sve prodje ok, ali se nista ne prikazuje. Kada u Debug prodje pretposljedni korak, vidim da se u TreeViewSaKonkretneForme ucitao 100% makar prvi node, ali ne iskace nista.
Sad, ja kontam da je logicno sto ovo ovako ne radi jer prakticno gazim controlu controlom, ali TreeView nema neku kolekciju kao sto ima datagridview u vidu datasource-a, pa da njega pamtim. Koliko vidim, moze da se pristupi samo nekom konkretnom Node-u, pa sad da preko nekih for petlji pakujem iz jednog u drugi nista necu dobiti. Takodje, da samo pamtim kolekciju objekata u softveru pa da ipak pozivam metod u NapraviStablo(), opet ne dobijam puno.
Siguran sam da postoji neka mnogo jednostavna glupost koja moze da se uradi da bi moja, bar osnovna, ideja radila.

Unapred hvala na odgovorima i odmah da se izvinim ako sam glup i ako je ovo elementarna stvar. Jednostavno nisam radio sa TreeView...
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.zaslon-telecom.si.



+14 Profil

icon Re: TreeView problemcic12.12.2011. u 12:30 - pre 150 meseci
TreeViewSaKonkretneForme je referenca.

Kada napises TreeViewSaKonkretneForme = TreeViewKojiCuvam ti u stvari ne pravis kopiju TreeViewKojiCuvam nago samo pravis jos jednu referencu na isti objekat (TreeViewSaKonkretneForme i TreeViewKojiCuvam referenciraju (pokazuju na) isti objekat).

TreeView je Control, Control ima parent-a. Cak iako reassignujes TreeViewSaKonkretneForme on ce i dalje imati starog parenta i nece biti prikazan na novoj formi dok mu ne promenis parenta. Ali cak i da promenis Parenta nije dobro jer ce onda d' izgine sa originalne forme, izmedju ostalog.

Resenje je da napravis meta-model koji predstavlja node-ove u drvetu i onda metod NapuniStablo koji puni stablo iz meta-modela. U tom slucaju kesiras meta-model a ne kontrolu, a meta-model punis preko kljent-server poziva samo tada kad je potrebno.

Npr.

Code (csharp):

public class TreeNodeModel<T>
{  
  public T Data { get; private set; }
  public TreeNodeModel<T> Parent { get; private set; }
  public List<TreeNodeModel<T>> Children { get; private set; }

  public TreeNodeModel(T nodeData)
  {    
    Data = nodeData;
  }
}

public class TreeModel<T>
{
  public TreeNodeModel<T> Root { get; private set }  
  public TreeModel(IEnumerable<T> data)
  {
    // Logika koja puni drvo kreirajuci TreeNodeModel instance .... i na kraju Root = rootNode;
  }

  public void FillTreeView(TreeView treeView)
  {
    //Punis drvo rekurzivno na osnovu root node
  }
}
 

if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: TreeView problemcic

[ Pregleda: 1181 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.