c# winform treelistview的使用(treegridview)
TreeView控件显示的内容比较单一,如果需要呈现更详细信息TreeListView是一个不错的选择。
先看效果:
首先需要引用文件System.Windows.Forms.TreeListView.dll、System.Runtime.InteropServices.APIs.dll
你可以将TreeListView加入到工具箱中然后在添加到窗体中。
1.你需要添加列
2.你需要添加一个ImageList作为节点图标的容器(你还需要配置TreeListView的SmallImageList属性为ImageList控件的ID)
3.现在可以给控件绑定数据了
此控件比较适合呈现具有父子级关系的复杂数据结构,当然也包含XML格式的数据
下面尝试解析一个设备树XML然后绑定到控件中:
<Device name="hidc-1600tv _192.168.230.188" ItemType="DVR" type="Onvif" TypeID="" Code="" location="" Description="" ID="" UniqueID="192.168.230.188">
<IP Value="192.168.230.188" />
<Port Value="80" />
<Username Value="admin" />
<Password Value="1234" />
<AuthenAddress Value="/" />
<AuthenMode Value="1" />
<OnvifUser Value="admin" />
<OnvifPwd Value="1234" />
<OnvifAddress Value="/onvif/device_service" />
<RTSPUser Value="admin" />
<RTSPPwd Value="1234" />
<ChildDevices>
<Device name="" ItemType="Channel" type="" TypeID="" Code="" location="" Description="" id="" UniqueID="">
<PTZEnable Value="True" />
<PTZ1 Value="5" />
<PTZ2 Value="15" />
<PTZ3 Value="25" />
<PTZ4 Value="35" />
<PTZ5 Value="45" />
<PTZ6 Value="55" />
<PTZ7 Value="65" />
<PTZ8 Value="75" />
<PTZ9 Value="85" />
<ChildDevices>
<Device name="" ItemType="RStreamer" type="" TypeID="1" Code="" location="" Description="" id="">
<MediaProfile Value="1" />
<Multicast Value="False" />
</Device>
<Device name="" ItemType="RStreamer" type="" TypeID="2" Code="" location="" Description="" id="">
<MediaProfile Value="2" />
<Multicast Value="False" />
</Device>
</ChildDevices>
</Device>
</ChildDevices>
</Device>
使用递归算法很容易提取XML的结构
public void LoadXmlTree(string xml)
{
XDocument xDoc = XDocument.Parse(xml); TreeListViewItem item = new TreeListViewItem();
string title = xDoc.Root.Attribute("name")?.Value ?? xDoc.Root.Name.LocalName;
item.Text = title;
item.ImageIndex = ;
item.SubItems.Add(xDoc.Root.Attribute("UniqueID")?.Value);
item.SubItems.Add(xDoc.Root.Attribute("ItemType")?.Value);
PopulateTree (xDoc.Root, item.Items);
tvDevice.Items.Add(item);
}
public void PopulateTree (XElement element, TreeListViewItemCollection items)
{
foreach (XElement node in element.Nodes())
{
TreeListViewItem item = new TreeListViewItem();
string title = node.Name.LocalName.Trim();
item.Text = title;
if (title == "Device")
{
var attr = node.Attribute("ItemType")?.Value;
switch (attr)
{
case "Channel": item.ImageIndex = ; break;
case "RStreamer": item.ImageIndex = ; break;
default: break;
}
item.SubItems.Add(node.Attribute("UniqueID")?.Value);
item.SubItems.Add(node.Attribute("ItemType")?.Value);
}
else
{
item.ImageIndex = ;
item.SubItems.Add(node.Attribute("Value")?.Value);
} if (node.HasElements)
{
PopulateTree (node, item.Items);
}
items.Add(item);
}
}
说明:
TreeListViewItem可构造传入value和imageindex,其中value会赋值给Text属性,imageindex就是节点显示的图标所对应的ImageList的索引。TreeListViewItem的SubItems就是其扩展列,它会按顺序依次显示到后面的列中。
你可以设置ExpandMethod属性来控制节点展开的方式,设置CheckBoxes属性控制是否显示复选框。
你可以通过订阅BeforeExpand、BeforeCollapse、BeforeLabelEdit三个事件来修改不同状态下的图标,如:
private void treeListView1_BeforeExpand(object sender, TreeListViewCancelEventArgs e)
{
if(e.Item.ImageIndex == ) e.Item.ImageIndex = ;
}
你可以设置LabelEdit属性来激活或禁用编辑,TreeListViewBeforeLabelEditEventArgs参数提供了相应的属性值。
private void treeListView1_BeforeLabelEdit(object sender, TreeListViewBeforeLabelEditEventArgs e)
{
if(e.ColumnIndex == )
{
ComboBox combobox = new ComboBox();
combobox.Items.AddRange(new string[]{"Html","Css","Javascript"});
e.Editor = combobox;
}
}
TreeListView开源你也可以根据自己的需要进行修改。
本文出处:http://www.cnblogs.com/liuxiaobo93/p/7942619.html
附件下载: TreeListView
c# winform treelistview的使用(treegridview)的更多相关文章
- Winform开发全套31个UI组件开源共享
一.前言 这套UI库是上一个公司(好几年前了)完成的.当时主要为开发公司内部ERP系统,重新设计实现了所有用到的Winform组建,包括Form窗体组建6个(支持换肤),基础控件25个.其中有很多参考 ...
- TreeListView排序不对
winForm控件TreeListView按照一定顺序后添加项,后发觉排序顺序自己变了,解决办法: TreeListViewItem viewItem = new TreeListViewItem() ...
- 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序
直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- winform 窗体圆角设计
网上看到的很多winform窗体圆角设计代码都比较累赘,这里分享一个少量代码就可以实现的圆角.主要运用了System.Drawing.Drawing2D. 效果图 代码如下. private void ...
- WinForm设置控件焦点focus
winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法: ①设置tabindex 把该文本框属性里的tabIndex设为0,焦点就默认在这个文本框里了. ②Winfor ...
- MVC还是MVVM?或许VMVC更适合WinForm客户端
最近开始重构一个稍嫌古老的C/S项目,原先采用的技术栈是『WinForm』+『WCF』+『EF』.相对于现在铺天盖地的B/S架构来说,看上去似乎和Win95一样古老,很多新入行的,可能就没有见过经典的 ...
- 基于 SailingEase WinForm Framework 开发客户端程序(3:实现菜单/工具栏按钮的解耦及状态控制)
本系列文章将详细阐述客户端应用程序的设计理念,实现方法. 本系列文章以 SailingEase WinForm Framework 为基础进行设计并实现,但其中的设计理念及方法,亦适用于任何类型的客 ...
随机推荐
- OpenWRT (RT5350) 使能两个串口
OpenWRT(RT5350) 默认使能一个串口(uartlite) ,当做console口了,另外一个串口(uartf)与gpio复用. 在查找资料的过程中,发现在新的内核中使用到了设备树(devi ...
- (@WhiteTaken)设计模式学习——组合模式
下面来学习一下组合模式. 组合模式概念是什么呢.从别的地方抄来了一些理论. 理论:将对象组合成树形结构以表示"部分-整体"的层次结构.Composite模式使得用户对单个对象和组合 ...
- 【转】认识物理I/O构件- 主机I/O总线
在数据离开系统内存总线后,它通常传输到另一条总线,即主机I/O总线.在今天的产品中,最常见的主机I/O总线是PCI总线,但也存在着几种其他的总线,如S -总线,EIS A总线及VME总线.主机I/O总 ...
- 【NOIP2016提高组】 Day1 T3 换教室
题目链接:https://www.luogu.org/problemnew/show/P1850 此题正解为dp. 我们先用floyd处理出任意两个教室之间的距离,用dis[i][j]表示. 用f[i ...
- Mysql编写sql语句的小技巧
1.查询数据(保证查询性能) SELECT * 和 SELECT t.id , t.name:后者性能其实总体优于前者. 2.在查询的时候最好给表起个 别名,方便找到表中要查询的字段.执行sql的进行 ...
- LeetCode 280. Wiggle Sort (摆动排序)$
Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...
- Spark SQL数据源
[TOC] 背景 Spark SQL是Spark的一个模块,用于结构化数据的处理. ++++++++++++++ +++++++++++++++++++++ | SQL | | Dataset API ...
- 机器学习之决策树(ID3 、C4.5算法)
声明:本篇博文是学习<机器学习实战>一书的方式路程,系原创,若转载请标明来源. 1 决策树的基础概念 决策树分为分类树和回归树两种,分类树对离散变量做决策树 ,回归树对连续变量做决策树.决 ...
- 《mysql必知必会》读书笔记--存储过程的使用
以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...
- HDU 4135 Co-prime(容斥+数论)
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...