C# 下 dev TreeList控件使用

来源:互联网 发布:工程造价数据库 编辑:程序博客网 时间:2024/05/16 10:54
   最近在项目中用到了Dev 中 Treelist这个控件,它能做出相当复杂的树形结构,目前应用的只是很简单的功能,不过在使用的过程中还是遇到了不少小问题,在这里记录下来,作为备忘,也希望能帮到其它碰到同样问题的童鞋。
1.简单的层次结构 
  要在Treelist中展现层次节点,比如, 井场其子节点为区队, 区队的子节点为班组,但有的班组比较特别,直属井场而没有上级的去对班组,类似于特别行政区。每次新建井场、区队节点赋初值为null,然后将查到的结果比如Name在赋值给Node,每次加子节点时判断上级Node是否为null,若为null则其子节点为更上一级,例如区队节点不为null,则班组的子节点为区队,否则子节点为井场。以此类推。
                            TreeListNode groupNode = null;                            if (groupName.Trim() != string.Empty)                            {                                if (unitNode != null)                                    groupNode = treeList.AppendNode(new object[] { groupName }, unitNode.Id);                                else if (crewNode != null)                                {                                    groupNode = treeList.AppendNode(new object[] { groupName }, crewNode.Id);                                }                                else                                {                                    groupNode = treeList.AppendNode(new object[] { groupName }, wellNode.Id);                                }                                groupNode.ImageIndex = groupNode.SelectImageIndex = 0;                            }
动态添加trelistnode用AppendNode方法,该方法8个重载,上述的treeList.AppendNode(new object[] { groupName }, crewNode.Id);object[]是treeNode的数据,或者说要显示的内容,crewNode.Id是其父节点参数。
 2.用Treelist显示数据表,即没有层次感。类似于datagridview的功能,完全可以用GridControl实现,只是在项目中用到发现了写问题,特此记录。
   首先,treeList的datasource似乎有些问题。
     
 查看dt是没有问题的。一直没有找到问题的原因,知道问题的大侠请不吝赐教。
首先,要取消层次感,要将Treelist的rootvalue属性设为null,再直接用DataSource,否则就会看见只有一条记录,点击展开才能看见其它记录。或者在添加TreeNode时每条记录的父节点都设为-1.
在项目中每次查的字段可能不同,因此要动态加载列而不能直接在设计器中设定,就在加载Column的地方我栽了跟头。
 private void SetTreeList(DataTable dt)        {            int columnCount = dt.Columns.Count;            if (columnCount < 1) return;            TreeListColumn[] columns = new TreeListColumn[columnCount];            treeLayerSearch.Columns.Capacity = columnCount;//设置treelist            for (int cIndex = 0; cIndex < columnCount; cIndex++)            {                TreeListColumn column = new TreeListColumn();                column.FieldName = dt.Columns[cIndex].ColumnName;                column.Name = column.Caption = dt.Columns[cIndex].ColumnName;                column.Visible = true;                column.VisibleIndex = cIndex;                columns[cIndex] = column;            }            treeLayerSearch.Columns.AddRange(columns);                int count = dt.Rows.Count;                for (int index = 0; index < count; index++)                {                    DataRow row = dt.Rows[index];                    treeLayerSearch.AppendNode(row.ItemArray, index);                }                          }

  

TreeListColumn的默认Visible是false。。。。。每次看明明滚动条变得很细了,双击定位东西也能定位,证明其实treeList确实有东西了,但就是一条记录也看不见!尴尬再一个因为是每次不知道列数,就算AddRange列之前执行 treeLayerSearch.Columns.Clear();再次查询的时候发现第一次查询的列还是残留在Treelist上,必须 treeLayerSearch.Columns.Capacity = columnCount;每次定义列空间。。。。有点类似与数组的Capacity 和count的关系。
2013-11-13  发现TreeList有保留字ID(Id、id),当查出的datatable含有ID列时直接用DataSource赋值会有异常,用上面添加Node的方法则显示不出,需要把关键字ID替换
,而在GridControl中没有这个问题。
原创粉丝点击