TreeView控件显示的内容比较单一,如果需要呈现更详细信息TreeListView是一个不错的选择。

先看效果:

首先需要引用文件System.Windows.Forms.TreeListView.dll、System.Runtime.InteropServices.APIs.dll

你可以将TreeListView加入到工具箱中然后在添加到窗体中。

1.你需要添加列

2.你需要添加一个ImageList作为节点图标的容器(你还需要配置TreeListView的SmallImageList属性为ImageList控件的ID)

3.现在可以给控件绑定数据了

此控件比较适合呈现具有父子级关系的复杂数据结构,当然也包含XML格式的数据

下面尝试解析一个设备树XML然后绑定到控件中:

  1. <Device name="hidc-1600tv _192.168.230.188" ItemType="DVR" type="Onvif" TypeID="" Code="" location="" Description="" ID="" UniqueID="192.168.230.188">
  2. <IP Value="192.168.230.188" />
  3. <Port Value="80" />
  4. <Username Value="admin" />
  5. <Password Value="1234" />
  6. <AuthenAddress Value="/" />
  7. <AuthenMode Value="1" />
  8. <OnvifUser Value="admin" />
  9. <OnvifPwd Value="1234" />
  10. <OnvifAddress Value="/onvif/device_service" />
  11. <RTSPUser Value="admin" />
  12. <RTSPPwd Value="1234" />
  13. <ChildDevices>
  14. <Device name="" ItemType="Channel" type="" TypeID="" Code="" location="" Description="" id="" UniqueID="">
  15. <PTZEnable Value="True" />
  16. <PTZ1 Value="5" />
  17. <PTZ2 Value="15" />
  18. <PTZ3 Value="25" />
  19. <PTZ4 Value="35" />
  20. <PTZ5 Value="45" />
  21. <PTZ6 Value="55" />
  22. <PTZ7 Value="65" />
  23. <PTZ8 Value="75" />
  24. <PTZ9 Value="85" />
  25. <ChildDevices>
  26. <Device name="" ItemType="RStreamer" type="" TypeID="1" Code="" location="" Description="" id="">
  27. <MediaProfile Value="1" />
  28. <Multicast Value="False" />
  29. </Device>
  30. <Device name="" ItemType="RStreamer" type="" TypeID="2" Code="" location="" Description="" id="">
  31. <MediaProfile Value="2" />
  32. <Multicast Value="False" />
  33. </Device>
  34. </ChildDevices>
  35. </Device>
  36. </ChildDevices>
  37. </Device>

使用递归算法很容易提取XML的结构

  1. public void LoadXmlTree(string xml)
  2. {
  3. XDocument xDoc = XDocument.Parse(xml);
  4.  
  5. TreeListViewItem item = new TreeListViewItem();
  6. string title = xDoc.Root.Attribute("name")?.Value ?? xDoc.Root.Name.LocalName;
  7. item.Text = title;
  8. item.ImageIndex = ;
  9. item.SubItems.Add(xDoc.Root.Attribute("UniqueID")?.Value);
  10. item.SubItems.Add(xDoc.Root.Attribute("ItemType")?.Value);
  11. PopulateTree (xDoc.Root, item.Items);
  12. tvDevice.Items.Add(item);
  13. }
  14. public void PopulateTree (XElement element, TreeListViewItemCollection items)
  15. {
  16. foreach (XElement node in element.Nodes())
  17. {
  18. TreeListViewItem item = new TreeListViewItem();
  19. string title = node.Name.LocalName.Trim();
  20. item.Text = title;
  21. if (title == "Device")
  22. {
  23. var attr = node.Attribute("ItemType")?.Value;
  24. switch (attr)
  25. {
  26. case "Channel": item.ImageIndex = ; break;
  27. case "RStreamer": item.ImageIndex = ; break;
  28. default: break;
  29. }
  30. item.SubItems.Add(node.Attribute("UniqueID")?.Value);
  31. item.SubItems.Add(node.Attribute("ItemType")?.Value);
  32. }
  33. else
  34. {
  35. item.ImageIndex = ;
  36. item.SubItems.Add(node.Attribute("Value")?.Value);
  37. }
  38.  
  39. if (node.HasElements)
  40. {
  41. PopulateTree (node, item.Items);
  42. }
  43. items.Add(item);
  44. }
  45. }

说明:

TreeListViewItem可构造传入value和imageindex,其中value会赋值给Text属性,imageindex就是节点显示的图标所对应的ImageList的索引。TreeListViewItem的SubItems就是其扩展列,它会按顺序依次显示到后面的列中。

你可以设置ExpandMethod属性来控制节点展开的方式,设置CheckBoxes属性控制是否显示复选框。

你可以通过订阅BeforeExpand、BeforeCollapse、BeforeLabelEdit三个事件来修改不同状态下的图标,如:

  1. private void treeListView1_BeforeExpand(object sender, TreeListViewCancelEventArgs e)
  2. {
  3. if(e.Item.ImageIndex == ) e.Item.ImageIndex = ;
  4. }

你可以设置LabelEdit属性来激活或禁用编辑,TreeListViewBeforeLabelEditEventArgs参数提供了相应的属性值。

  1. private void treeListView1_BeforeLabelEdit(object sender, TreeListViewBeforeLabelEditEventArgs e)
  2. {
  3. if(e.ColumnIndex == )
  4. {
  5. ComboBox combobox = new ComboBox();
  6. combobox.Items.AddRange(new string[]{"Html","Css","Javascript"});
  7. e.Editor = combobox;
  8. }
  9. }

TreeListView开源你也可以根据自己的需要进行修改。

本文出处:http://www.cnblogs.com/liuxiaobo93/p/7942619.html

附件下载: TreeListView

c# winform treelistview的使用(treegridview)的更多相关文章

  1. Winform开发全套31个UI组件开源共享

    一.前言 这套UI库是上一个公司(好几年前了)完成的.当时主要为开发公司内部ERP系统,重新设计实现了所有用到的Winform组建,包括Form窗体组建6个(支持换肤),基础控件25个.其中有很多参考 ...

  2. TreeListView排序不对

    winForm控件TreeListView按照一定顺序后添加项,后发觉排序顺序自己变了,解决办法: TreeListViewItem viewItem = new TreeListViewItem() ...

  3. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

    直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...

  4. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

  5. 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  6. winform 窗体圆角设计

    网上看到的很多winform窗体圆角设计代码都比较累赘,这里分享一个少量代码就可以实现的圆角.主要运用了System.Drawing.Drawing2D. 效果图 代码如下. private void ...

  7. WinForm设置控件焦点focus

    winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法: ①设置tabindex 把该文本框属性里的tabIndex设为0,焦点就默认在这个文本框里了. ②Winfor ...

  8. MVC还是MVVM?或许VMVC更适合WinForm客户端

    最近开始重构一个稍嫌古老的C/S项目,原先采用的技术栈是『WinForm』+『WCF』+『EF』.相对于现在铺天盖地的B/S架构来说,看上去似乎和Win95一样古老,很多新入行的,可能就没有见过经典的 ...

  9. 基于 SailingEase WinForm Framework 开发客户端程序(3:实现菜单/工具栏按钮的解耦及状态控制)

    本系列文章将详细阐述客户端应用程序的设计理念,实现方法. 本系列文章以  SailingEase WinForm Framework 为基础进行设计并实现,但其中的设计理念及方法,亦适用于任何类型的客 ...

随机推荐

  1. Java中多态的理解

    最近学习Java里面的多态下面是个人的整理: 多态存在的3个必要条件: 1.要有继承 2.要有方法的重写 3.父类引用指向子类对象(对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会 ...

  2. Python 第十三节 文件操作

    A 1.首先文件读写操作有以下几种模式:   a\a+  w\w+ r\r+   a模式:追加_写入模式,写入指针默认在开头,如果文件存在将在开头追加写入,如果文件不存在将创建文件再写入. a+模式: ...

  3. 【转】深入浅出:Linux设备驱动之字符设备驱动

    深入浅出:Linux设备驱动之字符设备驱动 一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据 ...

  4. LeetCode 110. Balanced Binary Tree (平衡二叉树)

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  5. 一台服务部署多个tomcat注意事项

    第一步  添加tomcat环境变量 # vim /etc/profile加入下代码 # TOMCAT ATALINA_BASE=/usr/local/tomcat8CATALINA_HOME=/usr ...

  6. Windows 编程,程序编译使用的命令行工具。

    Windows 编程,程序编译使用的命令行工具. 1.cl.exe文件是Visual C\C++的编译器,它将程序源代码文件编译为obj文件. 2.rc.exe文件是资源编译器.工程项目中的.rc文件 ...

  7. 关于php加密库加密数据上传数据库或解密出错的问题

    php加密拓展库随着php版本的更新,函数的使用方法有所改变,所以加密模式推荐使用ecb,其中加密算法19种,加密模式8种,通过这种方式加密后的数据上传数据库后提取出来进行解密会发现结果是乱码,我认为 ...

  8. 原生JS实现图片放大镜插件

      前  言 我们大家经常逛各种电商类的网站,商品的细节就需要用到放大镜,这个大家一定不陌生,今天我们就做一个图片放大镜的插件,来看看图片是如何被放大的…… 先看一下我们要是实现的最终效果是怎么样的  ...

  9. 工控SCADA模型 基于HTML5 Canvas WebGL制作摩托车

    工业方面制作图表,制作模型方面运用到 3d 模型是非常多的,在一个大的环境中,构建无数个相同的或者不同的模型,构建起来对于程序员来说也是一件相当头疼的事情,我们利用 HT 帮大家解决了很大的难题,以下 ...

  10. 有道云翻译接口 Show类

    package com.yangchong.fanyi; import java.awt.EventQueue;import java.awt.Toolkit; import javax.swing. ...