Avatar billede gonnemand Nybegynder
24. april 2009 - 14:56 Der er 5 kommentarer og
1 løsning

TreeView: finde en specifik treenode, og indsætte som dens childnode??

Jeg har lavet et alfabetisk treeview.

Har statisk oprettet 29 (A til Å) treenodes
treenode a = new treenode("A");
treenode b = new treenode("B");
osv osv.

Så tilføjer jeg dem til mit treeview
myTreeView.Add(a);
myTreeView.Add(b);
osv osv.

Når jeg så skal til at indsætte noder, kommer jeg f.eks. med en
string strName = "John"

Der skal så laves en new treeNode(strName), som skal indsættes som en childNode på node j.

Dette kan jeg selvfølgelig gøre ved at have 29 if-sætninger,
men kunne godt tænke mig en lidt smartere løsning.

F.eks. følgende kode:

tNode = new treeNode(strName);
node(subString(strName, 0, 1)).Add(tNode);

Men det kan jeg bare ikke finde noget der kan.
Nogle der kan hjælpe mig her? :-)
Avatar billede aaberg Nybegynder
24. april 2009 - 15:14 #1
Noget lignende dette (Ikke testet):

string førsteBogstav = strName.Substring(0,1);
foreach (TreeNode alfabetNode in myTreeView.Nodes)
{
  if (alfabetNode.Text == førsteBogstav)
  {
    alfabetNode.Nodes.Add(new TreeNode(strName);
    break;
  }
}
Avatar billede hmortensen Nybegynder
25. april 2009 - 16:37 #2
Du kan bruge treenode collections indexer:
for (char i = 'A'; i <= 'Z'; i++)
{
  treeView1.Nodes.Add(i.ToString(), i.ToString());
}
treeView1.Nodes.Add("Æ", "Æ");
treeView1.Nodes.Add("Ø", "Ø");
treeView1.Nodes.Add("Å", "Å");

string name = "Åge";
treeView1.Nodes[name.Substring(0, 1)].Nodes.Add(name);
Avatar billede gonnemand Nybegynder
26. april 2009 - 21:07 #3
Begge er mulige og fungerende løsninger, men kan ikke bare ikke få child-noderne til at lægge sig i alfabetisk rækkefølge.
Mine data kommer fra en database, sorteret ascending, men selv om de sættes ind i alfabetisk rækkefølge, så viser mit treeview dem ikke alfabetisk.

Jeg har søgt og søgt, unden held :-(
Avatar billede hmortensen Nybegynder
27. april 2009 - 15:44 #4
Prøv at vise din kode.
Avatar billede gonnemand Nybegynder
27. april 2009 - 18:56 #5
Fandt ud af at min datatable ikke var i sorteret rækkefølge, selv om at jeg selected databasen med en ORDER BY name.

Følgende blev gjort for at sortere:

DataRow[] dataRow = myDataTable.Select("", name ASC);
Og så kører jeg bare en:
foreach (DataRow row in dataRow)
{
  // do something with row
}

Jeg kører med hmortensen's løsning, da den er enkelt og fylder mindst.

Ikke at der er noget galt med aaberg_cc's løsning, men hmortensen
får point for denne her.
Avatar billede hmortensen Nybegynder
27. april 2009 - 19:03 #6
Svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester