TreeView
Definierad i Dynamix.Content5.Controls
TreeView är den grundläggande kontrollen för hierarkiska listor i webbsidor. Som standard ritar den ut en nästlad ul-li-struktur utgående från de rotnoder som anges.
För att exempelvis rita ut ett träd för webbplatsens användare och grupper kan vi använda följande kod:
using System.Linq;
using System.Collections.Generic;
public class UsersAndGroupsTreeView : TreeView
{
protected override IEnumerable<TreeNode> GetRootNodes()
{
foreach( var c in Object.GetAll<Group>().OrderBy( c => c.DisplayName ) )
{
yield return new TreeNode( c );
}
}
protected override void OnLoad( EventArgs e )
{
base.OnLoad( e );
// Auto-bind, this call could be left out for trees
// that are populated from consumer code
DataBind();
}
protected override IEnumerable<TreeNode> GetNodeChildren( TreeNode node )
{
var c = node.DataItem as Group;
if( c != null )
{
foreach( var u in c.Users )
{
yield return new TreeNode( u );
}
}
}
}
Resultatet blir:
<div id="UsersAndGroupsTreeView1" class="dxTreeView">
<ul class="dxTreeViewLevel dxTreeViewLevel0">
<li class="dxTreeViewItem">Administrators
<ul class="dxTreeViewLevel dxTreeViewLevel1">
<li class="dxTreeViewItem">System</li>
<li class="dxTreeViewItem">Administrator</li>
</ul>
</li>
<li class="dxTreeViewItem">Everyone
<ul class="dxTreeViewLevel dxTreeViewLevel1">
<li class="dxTreeViewItem">System</li>
<li class="dxTreeViewItem">Administrator</li>
<li class="dxTreeViewItem">Guest account</li>
</ul>
</li>
</ul>
</div>
Helt utan anpassad formattering blir utseendet:
Som standard skapas en HyperLink-kontroll inuti li-kontrollen och binds till nodens DataItem. Anledningen till att det inte syns några a-taggar i koden ovan är att användare och grupper inte har någon definierad url och HyperLinks standardbeteende är då att bara rita innehållet.
Eget innehåll i posterna
För att lägga till eller byta ut innehållet i poster överlagras metoden AddItemContents enligt t ex:
protected override void AddItemContents( System.Web.UI.Control item, TreeNode node )
{
var img = new Image();
var icon = IconsUtil.GetObjectIcons( node.DataItem ).GetIcon( IconSize.Size16 );
img.InitFromSource( icon );
item.Controls.Add( img );
// Call base to also add the default HyperLink
base.AddItemContents( item, node );
}
Css-klasser och taggar
De egenskaper som kan sättas kopplat till taggar och css är:
ItemCssClass - Anger css-klassen för varje post i trädet (normalt en li-nod).
Standardvärde: "[CssClass]Item"
ContainerCssClass - Anger css-klassen för varje nivå i trädet (normalt en ul-nod).
Standardvärde "[CssClass]Level [CssClass]Level[Level]"
FirstItemInLevelCssClass - Anger en css-klass som ska läggas till på den första noden i varje nivå.
Standardvärde: - (inget värde).
ItemTagKey - Anger vilken tag som ska skapas kring varje post.
Standardvärde: HtmlTextWriterTag.Li
ContainerTagKey - Anger vilken tag som ska skapas kring varje nivå.
Standardvärde: HtmlTextWriterTag.Ul
CssClass (ärvd från WebControl) - Anger yttersta nivåns css-klass och används som grund för nyckeln [CssClass] (se nedan).
Standardvärde: "dxTreeView"
Kontrollen förstår vissa dynamiska nycklar i css-klasserna:
[Level] - För noder byts nyckeln ut mot nodens nivå: 0, 1, 2 osv. För nivåer/behållare byts nyckeln ut mot föräldranodens nivå, eller 0 om det inte finns någon sådan.
[CssClass] - Byts ut mot värdet av Navigation-kontrollens egenskap CssClass
För exakt kontroll över css-klasserna kan man själv överlagra GetItemCssClass, GetRewrittenItemCssClassPart, GetContainerCssClass och GetRewrittenContainerCssClassPart.