今天,主要弄了一下对于树型控件的一些方法,以及异步加载。
参考:

http://www.cnblogs.com/greatverve/archive/2012/03/23/winform-treeview.html

下面是TreeView的一些用法

private void BindTreeView()
{
treeView1.LabelEdit = false;//不可编辑
//添加结点
TreeNode root = new TreeNode();
root.Text = "根节点";
//一级
TreeNode node1 = new TreeNode();
node1.Text = "";
TreeNode node2 = new TreeNode();
node2.Text = "";
//二级
TreeNode node11 = new TreeNode();
node11.Text = "";
TreeNode node12 = new TreeNode();
node12.Text = "";
TreeNode node21 = new TreeNode();
node21.Text = "";
TreeNode node22 = new TreeNode();
node22.Text = "";
//二级加入一级
node1.Nodes.Add(node11);
node1.Nodes.Add(node12);
node2.Nodes.Add(node21);
node2.Nodes.Add(node22);
//一级加入根
root.Nodes.Add(node1);
root.Nodes.Add(node2);
//
treeView1.Nodes.Add(root);
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode != null)
{
MessageBox.Show(treeView1.SelectedNode.Text);
}
}

基本用法有了,下面,就把我写的异步加载列表的方法写进去了,因为是参考网上的方法临时 写的,可能会有些不足之处,也有可以改进,优化的一些方法

 DataTable dt = data.createDT();
#region 树的异步加载
/// <summary>
/// 载入根节点
/// </summary>
public void make_rootView()
{ foreach (DataRow row in dt.Select("module_fatherid='M01'"))
{
TreeNode tn = new TreeNode();
string sk=row["module_id"].ToString();
tn.Text = row["module_name"].ToString();
treeView1.Nodes.Add(tn);
DataRow[] row2=(dt.Select("module_fatherid='" + sk + "'"));
if (row2.Count()!=)
{ TreeNode tn1 = new TreeNode();
tn1.Text = "";
tn.Nodes.Add(tn1);
}
}
}
/// <summary>
/// 载入子节点
/// </summary>
/// <param name="node_id"></param>
/// <param name="node"></param>
public void make_view(string node_id,TreeNode node)
{
node.Nodes.Clear();
foreach (DataRow row in dt.Select("module_fatherid='"+node_id+"'"))
{
TreeNode tn = new TreeNode();
string sk = row["module_id"].ToString();
tn.Text = row["module_name"].ToString();
node.Nodes.Add(tn); if ((dt.Select("module_fatherid='" + sk + "'")).Count() != )
{
TreeNode tn1 = new TreeNode();
tn1.Text = "";
tn.Nodes.Add(tn1);
}
}
}
/// <summary>
/// 查找父节点的ID
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void make_NodeView(object sender, TreeViewCancelEventArgs e)
{
TreeNode tn = e.Node;
string node_id = "";
foreach (DataRow row in dt.Select("module_name='" + tn.Text + "'"))
{
node_id = row["module_id"].ToString();
}
make_view(node_id, tn);
}
#endregion private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
make_NodeView(sender, e); }

在刚载入时调用

 private void Form1_Load(object sender, EventArgs e)
{ make_rootView(); }

在树型控件的事件treeView1_BeforeExpand调用

private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{ make_NodeView(sender, e); }

下面是我的数据源,我是根据下面这个表格的结构来写代码 ,根据结构的不一样,代码 也应做相应的改变

public class data
{
public static DataTable createDT()
{
DataTable dt = new DataTable();
dt.Columns.Add("module_id");
dt.Columns.Add("module_name");
dt.Columns.Add("module_fatherid");
dt.Columns.Add("module_url");
dt.Columns.Add("module_order"); dt.Rows.Add("C1", "全国", "", "", "");
dt.Rows.Add("M01", "广东", "C1", "", ""); dt.Rows.Add("M0101", "深圳", "M01", "", "");
dt.Rows.Add("M010101", "南山区", "M0101", "", "");
dt.Rows.Add("M010102", "罗湖区", "M0101", "", "");
dt.Rows.Add("M010103", "福田区", "M0101", "", "");
dt.Rows.Add("M010104", "宝安区", "M0101", "", "");
dt.Rows.Add("M010105", "龙岗区", "M0101", "", ""); dt.Rows.Add("M01010301", "上梅林", "M010103", "", "");
dt.Rows.Add("M01010302", "下梅林", "M010103", "", "");
dt.Rows.Add("M01010303", "车公庙", "M010103", "", "");
dt.Rows.Add("M01010304", "竹子林", "M010103", "", "");
dt.Rows.Add("M01010305", "八卦岭", "M010103", "", "");
dt.Rows.Add("M01010306", "华强北", "M010103", "", ""); dt.Rows.Add("M0102", "广州", "M01", "", "");
dt.Rows.Add("M010201", "越秀区", "M0102", "", "");
dt.Rows.Add("M010202", "海珠区", "M0102", "", "");
dt.Rows.Add("M010203", "天河区", "M0102", "", "");
dt.Rows.Add("M010204", "白云区", "M0102", "", "");
dt.Rows.Add("M010205", "黄埔区", "M0102", "", "");
dt.Rows.Add("M010206", "荔湾区", "M0102", "", "");
dt.Rows.Add("M010207", "罗岗区", "M0102", "", "");
dt.Rows.Add("M010208", "南沙区", "M0102", "", "");
return dt;
}
}

以上表结构是从网上摘录下来的!!!

winform TreeView的一些用法以及异步加载的更多相关文章

  1. winform异步加载数据到界面

    做一个学习记录. 有两个需求: 1.点击按钮,异步加载数据,不卡顿UI. 2.把获取的数据加载到gridview上面. 对于需求1,2,代码如下: public delegate void ShowD ...

  2. jsTree 的简单用法--异步加载和刷新数据

    首先这两个文件是必须要引用的,还有就是引用 jQuery 文件就不说了: <link href="/css/plugins/jsTree/style.min.css" rel ...

  3. WinForm中异步加载数据并使用进度条

    在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...

  4. WinForm中使用BackgroundWorker异步加载数据并使用进度条

    在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...

  5. require.ensure的用法;异步加载-代码分割;

    webpack异步加载的原理 webpack ensure相信大家都听过.有人称它为异步加载,也有人说做代码切割,那这 个家伙到底是用来干嘛的?其实说白了,它就是把js模块给独立导出一个.js文件的, ...

  6. js回调与异步加载的用法

    以前还是菜鸟的时候(虽然现在依然很菜 -_-|| )对异步加载与回调函数的技术无比向往,但也一直没有使用过,这次因为页面逻辑太过复杂,一堆请求逻辑,如果还是用顺序请求,页面的速度... 领导又要挠头了 ...

  7. ListView异步加载图片,完美实现图文混排

    昨天参加一个面试,面试官让当场写一个类似于新闻列表的页面,文本数据和图片都从网络上获取,想起我还没写过ListView异步加载图片并实现图文混排效果的文章,so,今天就来写一下,介绍一下经验. Lis ...

  8. ExtJS入门教程05,grid的异步加载数据

    上一篇演示了extjs grid的基本用法,并加载了本地数据.今天我们将演示如何加载异步数据. 所谓异步,就是通过ajax的方式将服务器端的数据加载到我们的grid中.为了提供数据,我们先定义一个数据 ...

  9. volley 应用 GET POST请求 图片异步加载

    package com.example.volleydemo; import java.util.HashMap; import java.util.Map; import org.json.JSON ...

随机推荐

  1. UI: 标题栏

    TitleBarDemo.xaml <Page x:Class="Windows10.UI.TitleBarDemo" xmlns="http://schemas. ...

  2. arcgis engine 监听element的添加、更新和删除事件(使用IGraphicsContainerEvents)

    IGraphicsContainerEvents Interface 如何监听 element事件? 如,当我们在Mapcontrol上添加.删除.更新了一个Element后,如何捕捉到这个事件?   ...

  3. QT C1041错误

    使用QT Createor + MSVC2013写程序时.我复制了一份之前OK的代码到新的工程中,工程名字和之前的工程一样,出现了奇怪的错误.开始程序总是崩溃,后来我删掉shadow build目录, ...

  4. [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图

    目录 写在前面 文档与系列文章 表及其约束 存储过程 视图 总结 写在前面 由于一直在山西出差,有几天没更新博客了.昨晚回到家,将博客园最近三天更新的文章搜集了一下,花费了半天的时间,看了看,有些文章 ...

  5. [UML]UML系列——活动图activity diagram

    系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) [UML]UML系列——类图Class [UML]UML系列——类 ...

  6. 大熊君大话NodeJS之------Connect中间件模块(第一季)

    一,开篇分析 截止到今天来说,NodeJS系列文章已经有将近十篇了,让我们回顾一下: (1),大熊君大话NodeJS之开篇------Why NodeJS(将Javascript进行到底) (2),大 ...

  7. win7下安装和使用Windows XP Mode

    如果想在电脑中安装多个操作系统有几种方法: 1.安装虚拟机,继而在虚拟机中安装操作系统.虚拟机个数就相当于电脑个数,常用的虚拟机软件有VMVare,VMVare功能齐全,但是安装文件较大. 2.如果你 ...

  8. ASP.NET 对于文件的下载与上传

    /// <summary> /// 下载附件查看 /// </summary> /// <param name="sender"></pa ...

  9. LPC1768/1769之CAN控制器概述(附库函数下载地址)

    一.背景: 使用LPC1769来做CAN的收发,在此对使用LPC1769的CAN控制器进行收发做个总结和记录,以备下 次开发快速上手使用. 附:LPC1768/1769除了支持最高频率不同以外,其它基 ...

  10. 【Go入门教程6】interface(interface类型、interface值、空interface{}、嵌入interface、反射)

    interface Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被interface的巧妙设计所折服. 什么是interface 简单 ...