Goto Tree List 树列表
Nodes 节点
Tree List 节点是组织成树状层次结构的数据行。
Nodes__6">Add New Nodes 添加新节点
如果 Tree List 具有数据源,则会自动生成节点(TreeListNode 类对象)。要在未绑定模式下添加节点,请调用“树列表设计器”对话框并切换到其“节点”选项卡。
Nodes_in_Code__10">Add New Nodes in Code 在代码中添加新节点
使用 TreeList.AppendNode 方法将新节点添加到 Tree List。
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Nodes;TreeListNode parentForRootNodes = null;
// Create a root node.
TreeListNode rootNode = tl.AppendNode(new object[] { "Alfreds Futterkiste", "Germany, Obere Str. 57", "030-0074321" }, parentForRootNodes);
// Create the root node's child node.
tl.AppendNode(new object[] { "Suyama, Michael", "Obere Str. 55", "030-0074263" }, rootNode);
使用以下参数指定新节点的单元格值及其在树层次结构中的位置:
-
nodeData - 用于初始化新节点的单元格值的值数组或 DataRow 对象。数组的值类型必须与数据源中的列类型匹配;否则,将引发异常。
-
parentNode - 一个 TreeListNode 对象,用于指定新节点的父节点。此值将分配给 ParentNode 属性。要附加根节点,请使用 null(VB 中的 Nothing)。
如果您在 nodeData 参数的相应字段中指定了父节点,则 parentNode 参数应指定相同的节点。
-
parentNodeId - 一个整数值,该值通过其 Id 属性值指定新节点的父节点。
使用以下参数指定新节点中显示的图像。要指定图像,请使用 SelectImageList 集合中的图像索引。
- imageIndex - 节点未聚焦时显示的图像。此值分配给 ImageIndex 属性。
- selectImageIndex - 聚焦节点时显示的图像。此值分配给 SelectImageIndex 属性。
使用 checkState 参数指定是否选中节点。如果启用了 AllowRecursiveNodeChecking 选项,则该方法将更新父节点和子节点。
使用 childrenCheckBoxStyle 参数可指定新节点的子节点是显示复选框、单选按钮,还是两者都不显示。此值将分配给 ChildrenCheckBoxStyle 属性。
使用 tag 参数将自定义数据与新节点关联。此值分配给 Tag 属性。
Nodes__46">Access Nodes 访问节点
您可以使用 TreeList.Nodes 属性访问控件根级别的节点。
//get the second node by its index
TreeListNode node = treeList1.Nodes[1];
//get all nodes that contain the "R&D" caption
var nodes = treeList1.Nodes.Where(n => n.GetDisplayText("Department").Contains("R&D"));
每个节点都有一个 TreeList.Nodes 存储子节点的集合。您可以使用节点迭代器或以下 API 来检索这些集合中的节点:
- TreeList.FocusedNode - 获取或设置聚焦节点。
- TreeList.FindNodeByFieldValue - 按字段值返回节点。
TreeListNode node = treeList1.FindNodeByFieldValue("Employee Name", "Kate Mossheart");
- TreeList.FindNodeByKeyID - 按节点的键字段值返回节点。
- TreeList.FindNodeByID - 返回由其标识符指定的节点。
Node Icons 节点图标
节点单元格可以包含一个图标。本节介绍可用于在单元格中显示图像的各种方法。
Select and State Icons Select 和 State 图标
您可以将 select 和 state 图标应用于节点。
如果 TreeListOptionsView.RowImagesShowMode 属性设置为 InCell,则图标将显示在节点单元格内。
有关更多信息,请参阅以下帮助主题:节点映像。
Conditional Formatting 条件格式
当您有一组显示不同值或值范围的图标时,请使用此方法。在下图中,指示市场份额增长的图标显示在单元格值旁边。
有关更多信息,请参阅以下帮助主题:条件格式。
Combo Box with Images 带图像的组合框
您可以使用此方法为单元格值提供图像,也可以将文本条目完全替换为这些图像。下面的代码将复选框替换为包含布尔值的列中的图标。
using DevExpress.XtraEditors.Repository;RepositoryItemImageComboBox repositoryItemDescriptionComboBox;
repositoryItemDescriptionComboBox = new RepositoryItemImageComboBox();
repositoryItemDescriptionComboBox.AutoHeight = false;
repositoryItemDescriptionComboBox.GlyphAlignment = DevExpress.Utils.HorzAlignment.Center;
repositoryItemDescriptionComboBox.SmallImages = svgImageCollection;
repositoryItemDescriptionComboBox.Items.Add("", true, 3);treeList1.RepositoryItems.Add(repositoryItemDescriptionComboBox);
descriptionColumn.ColumnEdit = repositoryItemDescriptionComboBox;
Context Icons in Text Box 文本框中的上下文图标
RepositoryItemTextEdit.ContextImageOptions 指定分配给文本框的栅格或矢量图标。您可以在使用此存储库项目的所有单元格中显示相同的图标。要在单个单元格中显示不同的图标,请创建多个 RepositoryItemTextEdit 对象并处理 TreeList.CustomNodeCellEdit 事件以将这些存储库项目分配给单元格。在下面的示例中,将带有上下文图像的文本框分配给包含“Arthur Miller”的单元格。
using DevExpress.XtraEditors.Repository;RepositoryItemTextEdit repositoryItemTextEdit2;
repositoryItemTextEdit2 = new RepositoryItemTextEdit();
repositoryItemTextEdit2.ContextImageOptions.SvgImage = svgImageCollection[0];
treeList1.RepositoryItems.Add(repositoryItemTextEdit2);private void treeList1_CustomNodeCellEdit(object sender, GetCustomNodeCellEditEventArgs e) {TreeList treeList = sender as TreeList;if(e.Node.Id != TreeList.NewItemNodeId && e.Column == employeeColumn && treeList.GetRowCellValue(e.Node, e.Column).ToString() == "Arthur Miller") {e.RepositoryItem = repositoryItemTextEdit2;}
}
Unbound Columns 未绑定的列
如果您需要一个不与特定数据源值关联的列(带有图像),请使用 RepositoryItemPictureEdit 对象创建一个未绑定的列作为就地编辑器。处理 TreeList.CustomUnboundColumnData 事件以向此列提供图像。
HTML Formatting HTML 格式
使用 TreeList.HtmlImages 集合和 Image HTML 标签将图像嵌入到单元格中。请注意,此方法使单元格不可编辑。
treeList1.HtmlImages = svgImageCollection1;
treeList1.RowHeight = 60;
TreeListColumn unbound = new TreeListColumn();
unbound.UnboundDataType = typeof(string);
unbound.FieldName = "unboundImageColumn";
unbound.Visible = true;
unbound.Caption = "Icon";
treeList1.Columns.Add(unbound);
RepositoryItemHypertextLabel htLabel = new RepositoryItemHypertextLabel();
htLabel.HtmlImages = svgImageCollection1;
treeList1.RepositoryItems.Add(htLabel);
unbound.ColumnEdit = htLabel;
treeList1.CustomUnboundColumnData += TreeList1_CustomUnboundColumnData;private void TreeList1_CustomUnboundColumnData(object sender, DevExpress.XtraTreeList.TreeListCustomColumnDataEventArgs e) {if (e.Column.Caption == "Icon") {//image from a collectione.Value = "<image=add_32x32.png>";//image from resources//e.Value = "<image=#_589812_200>";}
}
Draw a Cell 绘制单元格
处理 CustomDrawNodeCell 事件以重新绘制单元格,并绘制自定义图像和形状。在此示例中,在包含“Arthur Miller”的单元格中绘制了一张图像。
private void treeList1_CustomDrawNodeCell(object sender, CustomDrawNodeCellEventArgs e) {TreeList treeList = sender as TreeList;if (e.Node.Id != TreeList.NewItemNodeId && e.Column == employeeColumn && treeList.GetRowCellValue(e.Node, e.Column).ToString() == "Arthur Miller") {e.Cache.DrawImage(imageCollection1.Images[0], e.Bounds.X + offsetX, e.Bounds.Y + offsetY);}
}
Node Indents 节点缩进
节点缩进是控件的边界与节点的第一个单元格的边界之间的距离。TreeList.TreeLevelWidth 属性指定根节点的此距离。
Node Checkboxes and Radio Buttons Node 复选框和单选按钮
您可以在某些树级别向 TreeList 节点添加复选框或单选按钮。
要设置或检索节点检查状态,请使用 TreeList 控件的方法。在绑定模式下,您可以将节点检查状态与数据源字段同步。有关更多信息,请参阅以下帮助主题:节点检查 - 复选框和单选按钮。
Preview Sections 预览部分
预览部分是显示在节点下的所有列中的不可编辑注释。
有关更多信息,请参阅以下帮助主题:预览部分。
Examples 例子
- 如何:遍历节点并计算特定级别的节点数
- 如何:循环访问节点和折叠特定节点
- 如何:创建自定义节点并指定各个节点的高度
- 如何:启用自动高度调整