用于Web的TreeListView控件(多列的树形控件)

    最近老是要用到显示多列的树型结构,而treeview只能显示单列,gridview又不能显示树型的结构,所以打算自己做个控件来解决这个问题,暂时取名叫:TreeListView。先说下我的思路,园内的朋友如果有更好的思路或想法,请反馈。

    1.由于是多列,存在上下对齐问题,所以我用table呈现。

    2.如何记录树形的结构关系?
        给每行的tr加个属性 id 和childids ,id 是唯一的,childids记录他的子节点的id,多个id用“,”隔开。 (<tr id="1" depth="1" childids="2,3" >

    主要就这2点,具体怎么写就比较简单了,我就不说了,先上图

上面就是我的实现效果(下载演示

现在只实现个显示功能,事件啥的都没实现,半成品都不到,所以没提供代码,你可以通过Reflector.exe查看或者留下你的mail。

如果让控件又好用有灵活,这个问题真是比较头痛,想来想去最后就做成这个样子了。

虽然只做了一点点,还是发出来了,希望各位提供反馈意见,以便下个版本做的更好。

---------------------------

如何使用:

后台:

Employee e1 = new Employee("Nancy""Davalio");
            Employee e2 
= new Employee("Andrew""Fuller");
            Employee e3 
= new Employee("Huang""Hurry");
            Employee e4 
= new Employee("Jin""Faster");

            TreeListNode root 
= new TreeListNode();
            root.Text 
= "root";
            root.DataSource 
= e1;
            TreeListNode node 
= new TreeListNode();
            node.Text 
= "node1";
            node.DataSource 
= e2;
            TreeListNode node12 
= new TreeListNode();
            node12.Text 
= "node12";
            node12.DataSource 
= e3;
            TreeListNode node2 
= new TreeListNode();
            node2.Text 
= "node2";
            node2.DataSource 
= e4;

            node.ChildNodes.Add(node12);
            root.ChildNodes.Add(node);
            root.ChildNodes.Add(node2);
            

            
this.TreeListView1.DataSource = root;
            
this.TreeListView1.DataBind();

页面部分:

 

 

<custom:TreeListView ID="TreeListView1" runat="server">
    
<HeaderTemplate>
    
<table width="500" border="0" cellpadding="0" cellspacing="1" bgcolor="#999999">
    
<tr height="30" bgcolor="#FFFFFF">
    
<td>ID</td>
    
<td width="120px">Text</td>
    
<td width="80px">FirstName</td>
    
<td width="80px">LastName</td>
    
</tr>
    
</HeaderTemplate>
    
<ItemTemplate>
    
<tr <%# ((TreeListNode)Container.DataItem).TreeTr%> bgcolor="#FFFFFF">
        
<td height="30"><%# ((TreeListNode)Container.DataItem).TreeImage%><%# ((TreeListNode)Container.DataItem).ID%></td>
        
<td><%# ((TreeListNode)Container.DataItem).Text%></td>
        
<td><%# ((Employee)((TreeListNode)Container.DataItem).DataSource).FirstName%></td>
        
<td><%# ((Employee)((TreeListNode)Container.DataItem).DataSource).LastName%></td>
        
      
</tr>
    
</ItemTemplate>
    
<FooterTemplate>
    
</table>
    
</FooterTemplate>
    
</custom:TreeListView>

 

 

posted @ 2008-07-15 15:01  Hurry  阅读(5889)  评论(21编辑  收藏  举报