Arbejder med TreeNodeBinding i ASP.NET Treeview kontrol

Jeg har arbejdet på hvad jeg håber bliver en snart frigivet CodePlex projekt, der giver en flot integreret bit af webdele taler til hinanden via udbyder og forbruger forbindelser med henblik på at udforske et SharePoint-websted under dynen.  (Dette er helt sikkert blevet gjort før, men det er en læring projekt så meget som noget andet).  Dette er tænkt som en erstatning for windows Stifindervisning af SharePoint 2010 dokumentbiblioteker.

Koden har den sædvanlige rekursive kalde ned SPWeb og SPLists fra en given startende punkt.  Det objekt, der gør alle der gennemkører opbygger en XML-streng, der ser noget som dette:

<SiteCollection url =’http://demo2010a:9090′>
 
<Web
     title = 'Hej verden sandkasse' 
     Skabelon =' et websted for hold hurtigt organisere, Forfatter, og dele oplysninger, BLAH BLAH BLAH ">

     <liste
        title ='BCC_Health_Services_FAQs’
        Skabelon ='CustomList’
       
listID =’http://demo2010a:9090/helloworldsandbox[delim]1e02b001-3cb2-4f17-b63d-7809e86b4174′>
    
</liste>

     <liste
        title = 'BCC_Notifications' 
        Skabelon = 'CustomList' 
        listID =’
http://demo2010a:9090/helloworldsandbox[delim]5a5a13d1 - 877c - 41c 0-9063-b9612be80d5e’>
     </liste>

  </Web>

</SiteCollection>

Jeg forventer at rydde op, at XML før alt er sagt og gjort.

Jeg vil i sidste ende får disse oplysninger op og ind i en Treeview control.  Ikke ligefrem jorden rystende ting.

Den udfordring, jeg tog på her skulle tilsluttes en XML-datakilde kontrol i stedet for manuelt at opbygge min treenodes som jeg krydse træet i træstrukturen.  Jeg gjorde dette, dels fordi jeg bevidst gør tingene sværere for mig selv (Dette er et projekt, læring efter alle) og dels fordi jeg har denne vage begreb at opbygge trænoderne som jeg krydse træet er ikke en god idé for på lang sigt.

Problemet med denne tilgang er, at kontrolelementet Treeview ikke ved om de gode attributter på de interessante noder som "liste" eller "web", så det viser dette output som standard:

 

image

Det er ikke nyttigt.  Dette er, hvor klassen TreeNodeBinding hjælper.  Jeg kan bruge dette til at fortælle Treeview kontrol hvordan det bør fortolke XML.  Her er et eksempel:

tnb = ny TreeNodeBinding();
tnb.DataMember = "liste"; // Dette er etiketten i XML-koden for et websted.
tnb.TargetField = "listid";
tnb.ValueField = "titel";
tnb.ToolTipField = "Skabelon";

Denne bindende fortæller treeview, når den finder en <liste> node i XML-, anvende bindings for TargetField, ValueField og ToolTipField.  I maj app, disse kort som følger:

  • TargetField: Når nogen klikker på en nodeværdi, Dette er hvad du får for SelectedNode.Value.  Dette er ikke at forveksle med...
  • ValueField: Dette er hvad du vil Treeview skal vises til brugeren.
  • ToolTipField: Værdien fra XML-filen, som du vil bruge et værktøjstip.

Tilføje, at TreeNodebinding til trævisningens DataBindings og du får output som dette:

 

image

Jeg vil have mere på alt dette som jeg videre med projektet og til sidst sætte dette op på Codeplex.

</slutningen>

Abonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

3 tanker om ”Arbejder med TreeNodeBinding i ASP.NET Treeview kontrol

  1. Pingback: Tweets at nævne arbejder med TreeNodeBinding i ASP.NET Treeview Control «Paul Galvin SharePoint plads -- Topsy.com

  2. Holger

    Hej Paul,

    Jeg netop kontrollerede, mig selv. Det virkede som du beskrevet, selvom jeg ikke får disse oplysninger fra dit websted (Sikken skam :-)).
    Det punkt, jeg er interesseret i er, Jeg forsøgte at gøre strukturen doven indlæsning med egenskaben PopulateOnDemand. Ellers treeview indlæse den samlede struktur i en helhed, som jeg gerne vil undgå. Denne egenskab PopulateOnDemand synes ikke at have nogen effekt.

    Også treeview ikke spare nogen expand / collapse tilstandsoplysninger.

    Du løse disse problemer?

    Hilsen

    Holger

    Svar
    1. Paul Galvin Indlæg forfatter

      Jeg ved, du sendt denne kommentar længe siden. Bedrøvelig nemlig aldrig op med at reagere. Jeg antager, at du fik din løsning længst :).

      Svar

Efterlad et svar

Din e-mail adresse vil ikke blive offentliggjort. Krævede felter er markeret *