Arbeta med TreeNodeBinding i ASP.NET Treeview-kontrollen

Jag har arbetat på vad jag hoppas kommer att vara en snart släppt CodePlex projekt som ger lite trevlig integrerade webbdelar tala med varandra via leverantör/konsumenten anslutningar för att utforska en SharePoint-webbplats under omslag.  (Detta har verkligen gjorts före, men detta är ett lärande projekt så mycket som något annat).  Detta är menat att vara en ersättning för windows explorer-vy av SharePoint 2010 dokumentbibliotek.

Koden har det vanliga rekursivt kalla ned SPWeb och SPLists från en viss börjar peka.  Objektet som inte alla att närheten bygger upp en XML-sträng som ser ut så här:

<sitecollection url =’http://demo2010a:9090′>
 
<Web
     Title = "Hello World sandlåda" 
     Mallen = "en webbplats att snabbt ordna, författare, och dela information, BLA BLA BLA ">

     <lista
        Titel ='BCC_Health_Services_FAQs’
        Mallen ='CustomList’
       
ListId =’http://demo2010a:9090/helloworldsandbox[delim]1e02b001-3cb2-4f17-b63d-7809e86b4174′>
    
</lista>

     <lista
        Title = "BCC_Notifications" 
        Mallen = "CustomList" 
        ListId =’
http://demo2010a:9090/helloworldsandbox[delim]5a5a13d1-877 c-41 c 0-9063-b9612be80d5e’>
     </lista>

  </Web>

</sitecollection>

Jag förväntar mig att rensa upp som XML innan allt är sagt och gjort.

Jag vill slutligen få informationen upp och in i en Treeview-kontrollen.  Inte exakt jorden krossas grejer.

Jag tog den här utmaningen var att ansluta trädvyn till en XML-datakälla kontroll i stället för manuellt bygga upp mina treenodes som jag bläddra i trädet.  Jag gjorde detta delvis på grund av att jag avsiktligt gör saker svårare på mig själv (Det är ju ett lärande projekt) dels för att jag har denna vaga idén att bygga upp trädnoder som jag bläddra i trädet är inte bra på lång sikt.

Problemet med detta tillvägagångssätt är att Treeview-kontrollen inte vet om de goda attribut på intressanta noderna som "lista" eller "web" så att det visar denna produktion som standard:

 

image

Det är inte användbart.  Det är där klassen TreeNodeBinding hjälper.  Jag kan använda detta tala Treeview-kontrollen hur det bör tolka XML.  Här är ett exempel:

tnb = nya TreeNodeBinding();
tnb.DataMember = "lista"; // Är detta etiketten i xml för en webbplats.
tnb.TargetField = "listid";
tnb.ValueField = "titel";
tnb.ToolTipField = "Mall";

Denna bindning berättar TreeView-kontrollen att när den hittar en <lista> noden i XML, tillämpa bindningarna för TargetField, ValueField och ToolTipField.  I maj app, dessa karta som följer:

  • TargetField: När någon klickar på en nodvärde, Detta är vad du får för SelectedNode.Value.  Detta skall inte förväxlas mot…
  • ValueField: Detta är vad du vill TreeView-kontrollen ska visas för användaren.
  • ToolTipField: Värdet från XML-filen som du vill använda som en knappbeskrivning.

Lägga till att TreeNodebinding i trädvyn DataBindings och du får utdata såhär:

 

image

I have mer om allt detta som jag fortsätta på projektet och så småningom sätta detta på Codeplex.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

3 tankar på "Arbeta med TreeNodeBinding i ASP.NET Treeview-kontrollen

  1. Pingback: Tweets som nämner arbetar med TreeNodeBinding i ASP.NET Treeview-kontrollen «Paul Galvin SharePoint Space -- Topsy.com

  2. Holger

    Hej Paul,

    Jag kollade bara som mig själv. Det fungerade som du beskrev att även om jag inte får den informationen från din webbplats (Vad synd :-)).
    Jag är intresserad av är, Jag försökte göra strukturen lata laddar med egenskapen PopulateOnDemand. Annars treeview ladda komplett strukturen i en helhet som jag vill undvika. Den här egenskapen PopulateOnDemand inte verkar ha någon effekt.

    Även treeview inte spara någon expandera / komprimera tillståndsinformation.

    Du lösa dessa frågor?

    Hälsningar

    Holger

    Svar
    1. Paul Galvin inlägg Författare

      Jag vet att du postat den här kommentera länge sedan. Ledsen för att aldrig svara. Jag antar att du fick din lösning sedan länge :).

      Svar

Lämna svar

Din e-postadress kommer inte att publiceras. behövliga fält är markerade *