首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > 绑定列表框树型控件
【标  题】:绑定列表框树型控件
【关键字】:
【来  源】:http://blog.csdn.net/pxxx123/archive/2007/04/12/1562533.aspx

绑定列表框树型控件

这个我以前在cnblogs上发过,记得那是04年刚刚工作的事。
(后来退出博客园了,博客清空了,损失很多技术收藏,原创的东东)

还经常看到有些老手不知道怎么实现,寒一个

呵呵,本人算法厉害,show一哈

 

public class WebTree {

    DataTable sourceData;
    StringBuilder b;
    
string preIdField;
    
string curIdField;
    
string curNameField;

    
public WebTree(DataTable t, string _curid, string _preid, string _curname) {
        sourceData 
= t.Copy();
        preIdField 
= _preid;
        curIdField 
= _curid;
        curNameField 
= _curname;
        b 
= new StringBuilder();
    }

    
public void BindDrp(ListItemCollection items, string preId, DataTable dt) {
        
if (dt.Rows.Count == 0)
            
return;
        
//给出两种算法。
        /*for (int i = 0; i < dt.Rows.Count; i++) {
            DataRow dr = dt.Rows[i];
            if (dr[preIdField].ToString() == preId) {

                int depth = GetDepth(dr[preIdField].ToString());
                string deep = "";
                if (depth == 0)
                    deep = "◆ ";
                else {
                    deep += "├"; //├─┣━
                    for (int j = 0; j < depth - 1; j++) {
                        deep += "─";
                    }
                    deep += " ";
                }
                items.Add(new ListItem(HttpUtility.HtmlDecode(deep + dr[curNameField].ToString()), dr[curIdField].ToString()));
                string bId = dr[curIdField].ToString();
                dt.Rows.Remove(dt.Rows[i]);
                BindDrp(items, bId, dt);
                BindDrp(items, preId, dt);
            }
        }
*/
        DataRow[] rs 
= dt.Select(preIdField + "=" + preId, "OrderNum asc");
        
if (rs.Length == 0return;
        DataRow dr 
= rs[0];
        
int depth = GetDepth(dr[preIdField].ToString());
        
string deep = "";
        
if (depth == 0)
            deep 
= "◆ ";
        
else {
            deep 
+= ""//├─┣━
            for (int j = 0; j < depth - 1; j++) {
                deep 
+= "";
            }
            deep 
+= " ";
        }
        items.Add(
new ListItem(HttpUtility.HtmlDecode(deep + dr[curNameField].ToString()), dr[curIdField].ToString()));
        
string bId = dr[curIdField].ToString();
        dt.Rows.Remove(dr);
        BindDrp(items, bId, dt);
        BindDrp(items, preId, dt);
    }

    
public int GetDepth(string id) {
        DataRow[] rows 
= sourceData.Select(curIdField + "=" + id);
        
if (rows.Length == 0)
            
return 0;
        
return GetDepth(rows[0][preIdField].ToString()) + 1;
    }


}

使用示例:

DataTable data = new Boards().GetList("");
WebTree boardTree 
= new WebTree(data,T_Board.BoardId,T_Board.PreId,T_Board.BoardName);
boardTree.BindDrp(drpPre.Items, 
"0", data);
drpPre.Items.Insert(
0new ListItem("""0"));

 

DataTable data = new UpFiles().GetCates("");
WebTree cateTree 
= new WebTree(data, T_FileCategory.FileCateId, T_FileCategory.PreId, T_FileCategory.CateName);
cateTree.BindDrp(drpPre.Items, 
"0", data);

效果图:

 

《给初学者的Windows Vista的补遗手册》之067:【上一篇】
DevExpress的基本换肤:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • MySQL数据目录结构(1)
  • 系统微码升级
  • VB中对字符串的处理及其扩展
  • RAID是什么技术?
  • 重装Windows失败的八种应对办法
  • CReport v3.1 (中式报表控件)
  • 抓狂的Namespace Shell Extension (2)
  • [收藏]XML Related Technologies
  • IDS新技术介绍(2)
  • C++编程规范---第11章 其它编程经验
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.