`
ihuashao
  • 浏览: 4726320 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

TreeView

阅读更多
WINFORM界面如下:


本文用了2张表,结构如下:
表province: province_id province_name
表city: city_id city_name province_id

完整代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;

namespacetest
{
publicpartialclassTreeStruc:Form
{
publicTreeStruc()
{
InitializeComponent();
}

SqlConnectionconn
=newSqlConnection("server=zhuzy;integratedsecurity=sspi;database=library");
SqlDataAdapterda;
DataSetds
=newDataSet();
SqlCommandcmd;
///<summary>
///自定义节点类,继承于系统的TreeNode类,给节点增加一个IsFirstExpand属性
///</summary>
publicclassInheritTreeNode:TreeNode
{
privateboolisFirstExpand=true;

publicboolIsFirstExpand//属性
{
get{returnisFirstExpand;}
set{isFirstExpand=value;}
}

publicInheritTreeNode():base(){}
publicInheritTreeNode(stringtext):base(text){}
}

stringid="";
privatevoidTreeStruc_Load(objectsender,EventArgse)
{
da
=newSqlDataAdapter("selectprovince_id,province_namefromprovince",conn);
da.Fill(ds,
"province");
for(inti=0;i<ds.Tables["province"].Rows.Count;i++)
{
InheritTreeNoderoot
=newInheritTreeNode(ds.Tables["province"].Rows[i][1].ToString().Trim());
id
=ds.Tables["province"].Rows[i][0].ToString().Trim();
this.treeView1.Nodes.Add(root);
ReadChileNode(root);
id
="";//
}
this.treeView1.SelectedNode=treeView1.Nodes[0];
}

///<summary>
///读取node的子节点
///</summary>
privatevoidReadChileNode(TreeNodenode)
{
da
=newSqlDataAdapter("selectcity_namefromcitywhereprovince_id='"+id+"'",conn);
da.Fill(ds,
"city");
try
{
for(intj=0;j<ds.Tables["city"].Rows.Count;j++)
{
node.Nodes.Add(
newInheritTreeNode(ds.Tables["city"].Rows[j][0].ToString().Trim()));
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
ds.Tables[
"city"].Clear();//
}

///<summary>
///节点展开之前事件
///</summary>
privatevoidtreeView1_BeforeExpand(objectsender,TreeViewCancelEventArgse)
{
InheritTreeNodenode
=(InheritTreeNode)e.Node;//获取要选中、展开、折叠或选择的树节点e.Node

if(node!=null)
{
//判断该节点是否首次被展开
if(node.IsFirstExpand)
{
for(inti=0;i<node.Nodes.Count;i++)
{
ReadChileNode(node.Nodes[i]);
//为e.Node下的每个子节点,添加子节点
}
}
}
node.IsFirstExpand
=false;
}

///<summary>
///将文本框输入的内容添加为父节点
///</summary>
privatevoidbtnAddParentNode_Click(objectsender,EventArgse)
{
try
{
stringstrParentNode=this.textBox1.Text.ToString().Trim();
da
=newSqlDataAdapter("selectprovince_namefromprovincewhereprovince_name='"+strParentNode+"'",conn);
da.Fill(ds,
"province_name");
intnCount=ds.Tables["province_name"].Rows.Count;
if(textBox1.Text.ToString().Trim()!="")
{
if(nCount==0)//判断是否存在重复省份
{
da
=newSqlDataAdapter("selectmax(province_id)fromprovince",conn);
da.Fill(ds,
"id");

string_max_province_id=ds.Tables["id"].Rows[0][0].ToString().Trim();
intnID=Convert.ToInt32(_max_province_id)+1;
stringstrID="00"+nID.ToString().Trim();

string_insertSQL="insertintoprovincevalues('"+strID+"','"+strParentNode+"')";
cmd
=newSqlCommand(_insertSQL,conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

this.treeView1.Nodes.Add(strParentNode);//使新增的节点在TreeView里显示
textBox1.Clear();
textBox1.Focus();
}
else
{
MessageBox.Show(
"当前新增的省份已经存在,请重新输入!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
textBox1.Clear();
textBox1.Focus();
}
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}

///<summary>
///在选择了父节点后,将文本框中的内容添加为其子节点
///</summary>
stringstr_insert_province_id="";
stringstr_insert_city_id="";
privatevoidbtnAddChildNode_Click(objectsender,EventArgse)
{
try
{
TreeNodenode
=this.treeView1.SelectedNode;
stringstrProvinceName=node.Text;
if(node!=null)
{
retunParentNode_ID(strProvinceName);
insertChildNode(node);
textBox1.Clear();
textBox1.Focus();
}
else
{
MessageBox.Show(
"请先选择需要新增城市信息的省份!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
textBox1.Clear();
textBox1.Focus();
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}

///<summary>
///返回当前选择的父节点的province_id
///</summary>
///<returns></returns>
privatestringretunParentNode_ID(stringstrName)
{
da
=newSqlDataAdapter("selectprovince_idfromprovincewhereprovince_name='"+strName+"'",conn);
da.Fill(ds,
"province_id");
str_insert_province_id
=ds.Tables["province_id"].Rows[0][0].ToString().Trim();//即将新增的子节点的province_id
returnstr_insert_province_id;
}
///<summary>
///在当前选择的父节点下新增子节点
///</summary>
privatevoidinsertChildNode(TreeNodeCurrentParentNode)
{
stringstrChildNode=this.textBox1.Text.ToString().Trim();
try
{
if(textBox1.Text.ToString().Trim()!="")
{
stringstrsql="select*fromcitywhereprovince_id='"+str_insert_province_id+"'";
da
=newSqlDataAdapter(strsql,conn);
da.Fill(ds,
"tb");
intnCount1=ds.Tables["tb"].Rows.Count;
if(nCount1==0)//父节点下没有子节点
{
string_city_id="0"+"1";
string_insertSQL="insertintocityvalues('"+_city_id+"','"+strChildNode+"','"+str_insert_province_id+"')";

cmd
=newSqlCommand(_insertSQL,conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

CurrentParentNode.Nodes.Add(strChildNode);
textBox1.Clear();
textBox1.Focus();
}
if(nCount1!=0)//父节点下有子节点
{
da
=newSqlDataAdapter("selectcity_namefromcitywherecity_name='"+strChildNode+"'",conn);
da.Fill(ds,
"city_name");
intnCount2=ds.Tables["city_name"].Rows.Count;
if(nCount2==0)//不存在相同的子节点
{
string_max_city_id="selectmax(city_id)fromcitywhereprovince_id='"+str_insert_province_id+"'";
da
=newSqlDataAdapter(_max_city_id,conn);
da.Fill(ds,
"city_id");
str_insert_city_id
=ds.Tables["city_id"].Rows[0][0].ToString().Trim();
intnID=Convert.ToInt32(str_insert_city_id)+1;
str_insert_city_id
="0"+nID.ToString().Trim();

string_insertSQL="insertintocityvalues('"+str_insert_city_id+"','"+strChildNode+"','"+str_insert_province_id+"')";

cmd
=newSqlCommand(_insertSQL,conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

CurrentParentNode.Nodes.Add(strChildNode);
textBox1.Clear();
textBox1.Focus();
}
if(nCount2!=0)//存在相同的子节点
{
MessageBox.Show(
"已经存在此城市,请重新输入!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
textBox1.Clear();
textBox1.Focus();
}
}
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
}
}

备注:此树只实现2层结构
分享到:
评论

相关推荐

    C# List绑定treeView

    在本篇文章中,我们将深入探讨如何使用C#中的List集合动态地绑定到TreeView控件上。这种方法在构建具有层级结构的应用程序时非常有用,尤其是在处理组织结构、文件系统或者任何类型的树状数据时。 ### 一、理解...

    TreeView的序列化

    ### TreeView 的序列化 在本篇文章中,我们将探讨如何对 `TreeView` 控件进行序列化,以便在程序运行期间保存其状态,并能在后续需要时恢复。本文将详细介绍使用 `.NET` 中 `System.Runtime.Serialization....

    Bootstrap treeview实现动态加载数据并添加快捷搜索功能

    Bootstrap Treeview 实现动态加载数据并添加快捷搜索功能 Bootstrap Treeview 是一个基于 Bootstrap 的 jQuery 插件,用于显示树形结构数据。该插件支持多级列表树结构,能够以简单和优雅的方式显示继承树结构,如...

    wpf 漂亮的treeview

    在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)中创建一个美观且功能丰富的TreeView控件。TreeView是WPF中的一个重要组件,用于展示层次化的数据结构,它允许用户以树形视图来浏览和操作...

    WPF Combox+treeview以及 datagried+treeview控件

    在本文中,我们将深入探讨如何在Windows Presentation Foundation (WPF) 中使用自定义的`Combobox+TreeView`和`DataGrid+TreeView`控件来处理大规模数据。这些控件是WPF开发中的重要组成部分,特别是在构建用户界面...

    vb_Treeview节点上下左右移动.rar_VB树节点功能_adventurehpj_vb treeview_vb tree

    在VB编程环境中,Treeview控件是一个非常常用且强大的组件,用于展示层次化的数据结构。标题"vb_Treeview节点上下左右移动.rar_VB树节点功能_adventurehpj_vb treeview_vb tree"暗示了这个压缩包包含的是一个VB应用...

    好看的Winform.TreeView

    在Windows桌面应用开发中,`Winform.TreeView`是一个常用且功能强大的控件,它用于显示数据的层次结构,如文件系统、组织结构等。这个压缩包提供的“好看的Winform.TreeView”是一个自定义美化版的`TreeView`控件,...

    WPF TreeView递归异步绑定

    WPF的TreeView不像WinForms的TreeView那样,通过TreeNode实现树型节点。WPF的TreeView实现起来,我感觉有点像VM(View-Model)模式,就像WinForms中的DataGrid,控件负责显示,数据在DataTable中。那么我们在实现...

    将treeView序列化Xml

    在C#编程中,将`TreeView`控件的数据序列化到XML文件是一个常见的需求,这样可以方便地保存用户的配置或状态,以便于下次应用启动时恢复。以下是如何实现这个功能的详细步骤和知识点: 首先,我们需要创建两个...

    C# Treeview 导出Excel

    在C#编程中,`TreeView`控件常用于展示层级结构的数据,如文件系统、组织结构等。将`TreeView`中的数据导出到Excel是一种常见的需求,方便用户进行数据分析和处理。下面我们将深入探讨如何实现这个功能。 首先,...

    c# treeview 的check用法

    在.NET Framework中,C#语言提供了丰富的控件库,其中包括TreeView控件,它常用于构建层级结构的数据展示,如文件系统、组织结构等。在处理`TreeView`时,`Checkboxes`功能允许用户通过交互式勾选来选择或取消选择...

    用TREEVIEW实现下拉菜单

    "用TREEVIEW实现下拉菜单" TREEVIEW控件是Windows Forms和ASP.NET中的一个常用控件,用于显示树形结构的数据。下面将详细讲解如何使用TREEVIEW控件实现下拉菜单。 一、数据库设计 在实现TREEVIEW控件之前,我们...

    WPF TreeView拖拽实例

    在Windows Presentation Foundation (WPF) 中,`TreeView` 是一个常用控件,用于展示层次结构的数据。本实例探讨了如何实现`TreeView`节点的拖放(Drag & Drop)功能,这是用户界面交互中的一个重要特性,使得用户...

    qml中treeview用法

    在QML(Qt Meta Language)中,`TreeView`是一个强大的组件,用于展示层次结构的数据。它在用户界面上提供了一种可滚动、可选择的列表形式,非常适合展示目录结构、组织架构或者文件系统等信息。在本教程中,我们将...

    最漂亮的treeview(wpf)

    在Windows Presentation Foundation (WPF) 中,TreeView是一个用于展示层级数据的强大控件。它允许用户以树状结构浏览和操作数据,广泛应用于文件系统、组织结构或者任何具有层次关系的数据展示。标题“最漂亮的...

    JQ TreeView树视图

    在给定的“JQ TreeView树视图”主题中,我们将探讨如何使用jQuery来创建一个动态加载数据的TreeView组件。 首先,`TreeView`是一种将层次结构数据以树状结构展示的UI元素,它常用于网站和应用中以展示目录结构、...

    TreeView控件.rar

    TreeView控件是Windows Forms开发中常见的一种用户界面元素,它用于显示层次结构的数据视图,如文件系统、组织结构或数据库记录。这个压缩包“TreeView控件.rar”包含的资源很可能是关于如何在C#或VB.NET等.NET ...

    WinForm 中TreeView 互转 XML

    在.NET Framework的Windows Forms应用程序开发中,`TreeView`控件是一种常用组件,用于展示层次化的数据结构,如文件系统目录、组织结构等。与此相关的,`XML`(可扩展标记语言)是一种轻量级的数据存储和交换格式,...

    C# 将一个Treeview的树形结构保存成文件并可以实现将文件内容导入Treeview中

    在C#编程中,`TreeView`控件是一个常用的可视化组件,用于展示层次化的数据结构,如文件系统、数据库结构或自定义对象的树形表示。本篇将详细讲解如何实现将`TreeView`的树形结构保存到文件,并从文件中读取恢复到`...

    TreeView节点操作示例

    在Windows编程领域,`TreeView`控件是一种常用的数据可视化组件,它通常被用来展示层次结构的数据,例如文件系统、组织结构或计算机网络等。`TreeView`控件在用户界面中表现为一个可展开/折叠的树形结构,每个节点...

Global site tag (gtag.js) - Google Analytics