[ mladenvasic @ 07.05.2006. 14:53 ] @
Imam jedno pitanje:

Ima li ko lakse resenje za sledeci kod:
Code:
this->treeView->BeginUpdate();

        this->treeView->Nodes->Add(gcnew TreeNode("Ime firme"));
        this->treeView->Nodes[0]->ImageIndex = 4;
        this->treeView->Nodes[0]->SelectedImageIndex = 4;
        this->treeView->Nodes[0]->Nodes->Add(gcnew TreeNode("Radnici"));
        this->treeView->Nodes[0]->Nodes[0]->ImageIndex = 0;
        this->treeView->Nodes[0]->Nodes[0]->SelectedImageIndex = 0;
        ArrayList^ arr = gcnew ArrayList;
        arr->Add("stanje");
        arr->Add("u/i");
        arr->Add("vrijeme");
        IEnumerator^ mEnum = arr->GetEnumerator();
        while (mEnum->MoveNext())
        {
            String^ tree = safe_cast<String^>(mEnum->Current);
            this->treeView->Nodes[0]->Nodes[0]->Nodes->Add(gcnew TreeNode(tree));
            this->treeView->Nodes[0]->Nodes[0]->Nodes[arr->IndexOf(mEnum->Current)]->ImageIndex = 1;
            this->treeView->Nodes[0]->Nodes[0]->Nodes[arr->IndexOf(mEnum->Current)]->SelectedImageIndex = 1;
        }
        this->treeView->Nodes[0]->Nodes->Add(gcnew TreeNode("Gosti"));
        this->treeView->Nodes[0]->Nodes[1]->ImageIndex = 2;
        this->treeView->Nodes[0]->Nodes[1]->SelectedImageIndex = 2;
        arr->Clear();
        arr->Add("stanje");
        arr->Add("evidencija");
        mEnum = arr->GetEnumerator();
        while (mEnum->MoveNext())
        {
            String^ tree = safe_cast<String^>(mEnum->Current);
            this->treeView->Nodes[0]->Nodes[1]->Nodes->Add(gcnew TreeNode(tree));
            this->treeView->Nodes[0]->Nodes[1]->Nodes[arr->IndexOf(mEnum->Current)]->ImageIndex = 1;
            this->treeView->Nodes[0]->Nodes[1]->Nodes[arr->IndexOf(mEnum->Current)]->SelectedImageIndex = 1;
        }
        arr->Clear();

        this->treeView->Nodes[0]->Nodes->Add(gcnew TreeNode("Organizacija"));
        this->treeView->Nodes[0]->Nodes[2]->ImageIndex = 3;
        this->treeView->Nodes[0]->Nodes[2]->SelectedImageIndex = 3;
        
        String^ command = "select * from sektor";
        SqlConnection^ connection = gcnew SqlConnection(connectionString);
        //dataAdapter = gcnew SqlDataAdapter();
        dataAdapter->SelectCommand = gcnew SqlCommand(command,connection);
        dataAdapter->Fill(m_ds->Tables["sektor"]);
        
        command = "select * from sekcija";
        dataAdapter->SelectCommand = gcnew SqlCommand(command,connection);
        dataAdapter->Fill(m_ds->Tables["sekcija"]);

        command = "select * from radnajedinica";
        dataAdapter->SelectCommand = gcnew SqlCommand(command,connection);
        dataAdapter->Fill(m_ds->Tables["radnajedinica"]);
        
        array<DataRow^>^ x_row = m_ds->Tables["sektor"]->Select();
        int i;
        for (i=0;i<x_row->Length;i++)
        {
             String^ tree = safe_cast<String^>(x_row[i]["opis"]);
             this->treeView->Nodes[0]->Nodes[2]->Nodes->Add(gcnew TreeNode(tree));
             this->treeView->Nodes[0]->Nodes[2]->Nodes[i]->ImageIndex = 3;
             this->treeView->Nodes[0]->Nodes[2]->Nodes[i]->SelectedImageIndex = 3;

             array<DataRow^>^ y_row = m_ds->Tables["sekcija"]->Select("sektor = '" +
                 x_row[i]["sifra"] +"'");
             int j;
             for (j=0;j<y_row->Length;j++)
             {
                 String^ tree = safe_cast<String^>(y_row[j]["opis"]);
                 this->treeView->Nodes[0]->Nodes[2]->Nodes[i]->Nodes->Add(gcnew TreeNode(tree));
                 this->treeView->Nodes[0]->Nodes[2]->Nodes[i]->Nodes[j]->ImageIndex = 3;
                 this->treeView->Nodes[0]->Nodes[2]->Nodes[i]->Nodes[j]->SelectedImageIndex = 3;
             
                 array<DataRow^>^ z_row = m_ds->Tables["radnajedinica"]->Select("sekcija = '" +
                     y_row[j]["sifra"] +"'");
                 int k;
                 for (k=0;k<z_row->Length;k++)
                 {
                      String^ tree = safe_cast<String^>(z_row[k]["sifra"]);
                      this->treeView->Nodes[0]->Nodes[2]->Nodes[i]->Nodes[j]->Nodes->Add(gcnew TreeNode(tree));
                      this->treeView->Nodes[0]->Nodes[2]->Nodes[i]->Nodes[j]->Nodes[k]->ImageIndex = 1;
                      this->treeView->Nodes[0]->Nodes[2]->Nodes[i]->Nodes[j]->Nodes[k]->SelectedImageIndex = 1;
                 }
                 delete []z_row;
             }
             delete []y_row;
        
        }
        delete []x_row;
        m_ds->Tables["radnajedinica"];
        m_ds->Tables["sektor"];
        m_ds->Tables["sekcija"];

    
        this->treeView->EndUpdate();
        this->treeView->Nodes[0]->Expand();
        this->treeView->Nodes[0]->Nodes[0]->Expand();
[ NrmMyth @ 07.05.2006. 15:33 ] @
A sta je to???
Ti stvarno mislis da ce ti to netko besplatno pokusat shvatiti...
[ spartak @ 07.05.2006. 16:59 ] @
Ok, vrlo je jasno da kolega ima sektore i u okviru njih radne jedinice cije podatke dovlaci iz baze i puni treeview.

Isto tako mi izgleda dovoljno jednostavno. Sta bi pojednostavljivao ovde i zasto?
[ mladenvasic @ 07.05.2006. 18:31 ] @
Citat:
NrmMyth: A sta je to???
Ti stvarno mislis da ce ti to netko besplatno pokusat shvatiti...

Pa dobro !!! Ako punjenje obicnog TreeView-a treba da se plati nije problem, samo reci kako da ti urucim novac ;-)


Citat:
spartak: Ok, vrlo je jasno da kolega ima sektore i u okviru njih radne jedinice cije podatke dovlaci iz baze i puni treeview.

Isto tako mi izgleda dovoljno jednostavno. Sta bi pojednostavljivao ovde i zasto?

Mislio sam sto se tice performansi, mozda postoji bolje resenje. Da li postoji mogucnst da se trodimenzionalni niz napuni podacima iz baze (iz 3 razlicite tabele) pa da se oni kriste u petljama.
Isto tako, pristup bazi ... mozda neki drugi nacin ???
[ spartak @ 07.05.2006. 19:24 ] @
Pravo da ti kazem ne stizem da se udubim mnogo, ali evo ti na prvu ruku sta mi je zapalo za oko.

Prvo u vezi punjenja DataSet iz baze. Imaju li ti podaci nekakvu medjusobnu vezu po kljucevima, hijerarhiji? Kako ovde punis drvo, za svaki sektor ponovo sve radne jedinice iste ili?

Drugo ne znam da li postoji neki poseban razlog da tumbas podatke iz ds u nizove pa da punis drvo. Kroz tabelu u ds mozes da prolazis u okviru for petlje i dodajes vrednosti direktno. To bih refleksno tako odradio.

Kazem ti, opet je na brzaka.
[ Deep|Blue @ 07.05.2006. 23:30 ] @
2 predloga iz vb-a

1. Ne znam za C, al u vb-u pored dataadaptera, podatke mozes da preuzmes i preko datareadera. Jeste malo vise kucanja, al veruj mi da je drasticno brze. Cak i pri velikim kolicinama podataka. Vredi se malo potruditi oko toga

2. Dal ti je potrebno da ucitavas celo stablo odjednom. Dosta ovisi od vrste programa i sta korisnik radi s njim, al cesto korisnik uopste ne otvara veci deo stabla, tako da nema potrebe da se ucitava kompletno, vec kako rasiri neku granu tako je i popunis podacima.
[ spartak @ 08.05.2006. 13:08 ] @
@Deep|Blue

I zbog tvojeg pod 1 i pod 2 sam ga pitao sta se tu u stvari desava od biznis logike. Ja iskreno ne mogu da zamislim da moze da ima sektora i radnih jedinica u celoj privredi neke zemlje da bi primetio razliku izmedju punjenja sa da i dr, da li da puni celo drvo ili deo po deo ako zatreba.

Koliko planiras nivoa grananja drvo da ima uopste, i do koliko od prilike svorova po nivou moze biti? To bi izmedju ostalog trebalo da ti bude parametar u odlucivanju kako da pristupis.