多种方法进行treeview绑定数据库

多种方法进行treeview绑定数据库
多种方法进行treeview绑定数据库

TreeView绑定数据库(免费,哥为了大家,费了20个经验值,给个5星吧!)

数据库:

公司:id(int) company(varchar(50)

部门:id(int) deid(int) department(varchar(50))

班组:id(int) coid(int) class(varchar(50))

前台

方法1:

DB DBManager = new DB();//实例化数据库操作类

string strConn = System.Configuration.ConfigurationManager.Conne ctionStrings["rizhi"].ConnectionString;

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

//TreeView1.Attributes.Add("onclick", "OnTreeNodeChecked() ");

TreeView1.Attributes.Add("onclick", "testClick(event);return tr ue;");//单击文字,CheckBox=true

TreeView1.ShowCheckBoxes = TreeNodeTypes.Leaf;//最后一级选中

TreeView1.ExpandDepth = 0;//不展开

using (SqlConnection conn = new SqlConnection(strConn))

{

DataSet ds_company = new DataSet();//实例化数据集(公司) SqlDataAdapter sda_company = new SqlDataAdapter("selec t * from [company] where id<>"+0+" and id<>"+1001, conn);//实例化数据适配器(公司)

sda_company.Fill(ds_company, "company");//虚拟表填充到内存for (int i = 0; i < ds_company.Tables["company"].Rows.Coun

t; i++)//循环所有"公司"

{

TreeNode td_company = new TreeNode();//实例化公司节点

td_company.Text = ds_company.Tables["company"].Rows [i]["company"].ToString();//公司节点名称

TreeView1.Nodes.Add(td_company);//将公司节点添加至"树" td_company.SelectAction = TreeNodeSelectAction.Expand;

DataSet ds_department = new DataSet();//实例化数据集(部门)

SqlDataAdapter sda_department = new SqlDataAdapter("s elect * from [department] where [coid]=" + ds_company.Tables["compa ny"].Rows[i]["id"]+" and department<>'全公司'" , conn);//实例化数据库适配器(部门)

sda_department.Fill(ds_department, "department");//虚拟表填充到内存

for (int j = 0; j < ds_department.Tables["department"].Ro ws.Count; j++)//循环 ds.Tables["department"].Rows[i]["id"] 对应的所有部门

{

TreeNode td_department = new TreeNode();//实例化部门节点

td_department.Text = ds_department.Tables["departme nt"].Rows[j]["department"].ToString();//部门节点名称

td_company.ChildNodes.Add(td_department);//填充部门节点至"树"

td_department.SelectAction = TreeNodeSelectAction.Ex pand;//只允许展开

#region如果人员属于某个班组

if (DBManager.getDs("select [info] from [user] wher

e [pid]=" + ds_department.Tables["department"].Rows[j]["id"] + "", "is ").Tables["is"].Rows.Count == 0)

{

DataSet ds_class = new DataSet();//实例化数据集(班组) SqlDataAdapter sda_class = new SqlDataAdapter("sel ect * from [class] where [deid]=" + ds_department.Tables["department

"].Rows[j]["id"], conn);//实例化数据库适配器(班组)

sda_class.Fill(ds_class, "class");//虚拟表填充到内存

for (int z = 0; z < ds_class.Tables["class"].Rows.Coun t; z++)//循环 ds_department.Tables["class"].Rows[j]["id"] 对应的所有班组 {

TreeNode td_class = new TreeNode();//实例化班组节点

td_class.Text = ds_class.Tables["class"].Rows[z][" class"].ToString();//班组节点名称

td_department.ChildNodes.Add(td_class);//填充班组节点至"树"

td_class.SelectAction = TreeNodeSelectAction.Expa nd;//只允许展开

DataSet ds_user = new DataSet();//实例化数据集(人员)

SqlDataAdapter sda_user = new SqlDataAdapter("s elect [name] from [user] where [pid]=" + ds_class.Tables["class"].Rows [z]["id"] + "", conn);////实例化数据库适配器(人员)

sda_user.Fill(ds_user, "user");//虚拟表填充到内存

for (int k = 0; k < ds_user.Tables["user"].Rows.Co unt; k++)//循环 ds_department.Tables["user"].Rows[k]["name"] 对应的所有人员

{

TreeNode td_user = new TreeNode();//实例化班组节点

td_user.Text = ds_user.Tables["user"].Rows[k] ["name"].ToString();//人员节点名称

td_class.ChildNodes.Add(td_user);//填充人员节点至"树"

td_user.NavigateUrl = "javascript:void(0)";//选中,但无效

}

}

}

#endregion

#region如果人员直接属于某个部门

else

{

DataSet ds_user = new DataSet();

SqlDataAdapter sda_user = new SqlDataAdapter("sel ect [name] from [user] where [pid]=" + ds_department.Tables["depart ment"].Rows[j]["id"] + "", conn);

sda_user.Fill(ds_user, "user");

for (int k = 0; k < ds_user.Tables["user"].Rows.Coun t; k++)

{

TreeNode td_user = new TreeNode();

td_user.Text = ds_user.Tables["user"].Rows[k]["n ame"].ToString();

td_department.ChildNodes.Add(td_user);

td_user.NavigateUrl = "javascript:void(0)";

}

}

#endregion

}

}

}

}

}

方法2:

string strConn = System.Configuration.ConfigurationManager.Conne ctionStrings["rizhi"].ConnectionString;

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

DataSet ds = new DataSet();

SqlConnection conn = new SqlConnection(strConn);

using (conn)

{

SqlDataAdapter sda_Company = new SqlDataAdapter("selec t [id],[company] from [company]", conn);

sda_Company.Fill(ds, "company");

TreeNode tn_Company;

TreeNode tn_Department;

TreeNode tn_Class;

foreach (DataRow company_row in ds.Tables["company"].Ro ws)

{

tn_Company = new TreeNode();

tn_Company.Text = company_row["company"].ToString(); tn_Company.Value = company_row["id"].ToString();

TreeView1.Nodes.Add(tn_Company);

SqlDataAdapter sda_Department = new SqlDataAdapter(" select [id],[department] from [department] where coid=" + tn_Company. Value, conn);

sda_Department.Fill(ds, "department");

if (ds.Tables["department"].Rows.Count > 0)

{

foreach (DataRow department_row in ds.Tables["depart ment"].Rows)

{

tn_Department = new TreeNode();

tn_Department.Text = department_row["department "].ToString();

tn_Department.Value = department_row["id"].ToStri ng();

tn_Company.ChildNodes.Add(tn_Department);

SqlDataAdapter sda_Class = new SqlDataAdapter("sel ect [id],[class] from [class] where deid=" + tn_Department.Value, conn); sda_Class.Fill(ds, "class");

if (ds.Tables["class"].Rows.Count > 0)

{

foreach (DataRow class_row in ds.Tables["class"]. Rows)

{

tn_Class = new TreeNode();

tn_Class.Text = class_row["class"].ToString();

tn_Class.Value = class_row["id"].ToString();

tn_Department.ChildNodes.Add(tn_Class);

}

ds.Tables["class"].Clear();

}

sda_Class.Dispose();

}

ds.Tables["department"].Clear();

}

sda_Department.Dispose();

}

sda_Company.Dispose();

}

}

}

方法3:

public void bindTv()

{

ds = new DataSet();

using (SqlConnection conn = new SqlConnection(strConn))

{

conn.Open();

SqlDataAdapter sda = new SqlDataAdapter("select * from [class]", co nn);

sda.Fill(ds);

}

AddTree(101, (TreeNode)null);

}

public void AddTree(int ParentID,TreeNode pNode)

{

DataView dvTree = new DataView(ds.Tables[0]);

string Fstr = "[deid]=" + ParentID;

dvTree.RowFilter = Fstr;

foreach (DataRowView Row in dvTree)

{

TreeNode Node = new TreeNode();

if (pNode == null)

{

Node.Value = Row["id"].ToString();

Node.Text = Row["class"].ToString();

TreeView1.Nodes.Add(Node);

AddTree(Int32.Parse(Row["id"].ToString()), Node);

}

else

{

Node.Value = Row["id"].ToString();

Node.Text = Row["class"].ToString();

pNode.ChildNodes.Add(Node);

AddTree(Int32.Parse(Row["id"].ToString()), Node);

}

}

}

TreeView控件要求绑定到xml数据源上,所以必须设法把数据库中的内存转成xml文件,然后再进行绑定。

首先,在网页中添加一个XmlDataSource:

和一个TreeView控件:

然后在Page_load事件中添加以下代码:

// 连接数据库

SqlConnection conn = new SqlConnection("连接字符串");

SqlCommand cmd = new SqlCommand("SELECT * FROM 数据表", conn);

conn.Open();

SqlDataReader reader = cmd.ExecuteReader();

// 新建XML文档

XmlDocument doc = new XmlDocument();

XmlElement root;

XmlElement element;

// 插入xml声明

XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, "yes");

doc.InsertBefore(dec, doc.DocumentElement);

// 用来记录根节点元素

ArrayList elements = new ArrayList();

// 插入第一个节点

reader.Read();

element = doc.CreateElement((string)reader["name"]);

elements.Add(element);

doc.InsertAfter(element, dec);

// 插入后面的子节点

while (reader.Read())

{

// 创建子节点

element = doc.CreateElement((string)reader["name"]);

elements.Add(element);

// 找到它的父节点,然后添加到父节点下

root = (XmlElement)elements[(int)reader["parent"]-1];

root.AppendChild(element);

}

// 保存xml文件

FileStream fs = new FileStream(@"D:\Temp\names.xml", FileMode.Create);

doc.Save(fs);

fs.Close();

// 设置xml数据源控件并把它绑定到TreeView控件上

XmlDataSource1.DataFile = @"D:\Temp\names.xml";

TreeView1.DataSource = XmlDataSource1;

TreeView1.DataBind();

这样TreeView1就绑定了一个从数据库中读出的树结构,并在网页中显示出来。

再说明一下,TreeView是不可能绑定到一个关系数据库表的数据源上的,只能绑定到Xml数据源或SiteMapDataSource。

作者:cg1 摘自:https://www.360docs.net/doc/6d15400327.html, 编辑:cg1 更新日期:2003-5-29 浏览人次:3539

专题地址:

https://www.360docs.net/doc/6d15400327.html,/?kbid;75FABE1E12DC

简述:

本文简述了如何设计表的结构才能方便的用TREEVIEW 控件显示数据的层次关系。

阅读前需掌握:

难度等级:

等级未评定

问题:

新手来看:如何设计表结构便于treeview显示?

食品饮料类

--饮料类

--果汁类

--山楂汁

--柠檬汁

--碳酸类

--可口可乐

--百事可乐

--酒类

--啤酒类

--烟台啤酒

--青岛啤酒

--白酒类

--茅台

--五粮液

办公设备类

--…………以此类推

请问该如何建表,便于用treeview显示,而且能反映他们之间的类别关系

回答:

方法一:

一个表

字段如下:

id(自动编号)

fullname(文本)

parentID(长整)

parentid就是该种商品上一级的商品id

三个字段即可:

读取它的父ID即可反映关系

ID 名称父ID ——————————————————

1 食品饮料类0

2 饮料类 1

3 果汁类 2

4 山楂汁 3

5 柠檬汁 3

6 碳酸类 2

7 可口可乐 6

8 百事可乐 6

9 酒类 1

10 啤酒类9

11 烟台啤酒10

12 青岛啤酒10

13 白酒类9

14 茅台13

15 五粮液13

16 办公设备类0

……

顶层的类别的parentID为Null

本方法层数是无穷的,但是统计起来麻烦

有网友问本方法生成的表在统计某个节点信息的时候不方便,其实写一个函数归递其自身就可以了。以下代码显示了统计根节点信息的方法:

Function CreateEgTable()

'为本演示生成一个表

'将光标停在这里,按F5 键,运行代码生成TREE 表

Dim strSql(10) As String

Dim i As Integer

strSql(0) = "create table tree (id AUTOINCREMENT(1,1),fullname text(50),pare ntID long)"

strSql(1) = "insert into tree(fullname,parentid) values('a',0)"

strSql(2) = "insert into tree(fullname,parentid) values('a1',1)"

strSql(3) = "insert into tree(fullname,parentid) values('b',0)"

strSql(4) = "insert into tree(fullname,parentid) values('b1',3)"

strSql(5) = "insert into tree(fullname,parentid) values('b2',3)"

strSql(6) = "insert into tree(fullname,parentid) values('b2b',5)"

strSql(7) = "insert into tree(fullname,parentid) values('b3',3)"

strSql(8) = "insert into tree(fullname,parentid) values('b3a',7)"

strSql(9) = "insert into tree(fullname,parentid) values('a1a',2)"

strSql(10) = "insert into tree(fullname,parentid) values('a1a1',9)"

For i = LBound(strSql) To UBound(strSql)

CurrentProject.Connection.Execute strSql(i)

Next

End Function

Function RunTest()

'按CTRL + G 后显示“立即窗口”

'将光标停在这里,按F5 键,运行代码直接显示结果

Debug.Print ListSub_L(0, 0)

Debug.Print ListSub(0)

End Function

Function ListSub(ByVal lngID As Long, Optional ByVal strDelimiter) As String

'本函数归递自身来查询对应TREE 表中某个节点的所有子节点

'本函数的结果集和被用来查询子节点的统计结果,比如:

'dim strSQL as String

'strSQL="select * from tree where id in(" & ListSub(0) & ")"

If IsMissing(strDelimiter) = True Then

strDelimiter = ","

End If

Dim strSql As String

Dim rs As New ADODB.Recordset

strSql = "select * from tree where parentid=" & lngID

rs.Open strSql, CurrentProject.Connection, 1, 1

Do Until rs.EOF

ListSub = ListSub & strDelimiter & rs("fullname") & ListSub(rs("id"))

rs.MoveNext

Loop

End Function

Function ListSub_L(ByVal lngID As Long, ByVal i As Long) As String

'本函数归递自身来查询对应TREE 表中某个节点的所有子节点

'并用简单的表示方法排列出所有层次关系

i = i + 1

Dim strSql As String

Dim rs As New ADODB.Recordset

strSql = "select * from tree where parentid=" & lngID

rs.Open strSql, CurrentProject.Connection, 1, 1

Do Until rs.EOF

ListSub_L = ListSub_L & vbCrLf & String(i, Chr(9)) & rs("fullname") & ListSub_L(rs("id"), i)

rs.MoveNext

Loop

End Function

方法二:

一个表

字段如下:

id(自动编号)

fullname(文本)

ProgramID(文本)

programID是5位一段的数字,比如

食品饮料类:00001

饮料类:0000100001

果汁类:000010000100001

山楂汁:00001000010000100001

柠檬汁:00001000010000100002

本方法层数是有限制的,字符串最大是255,如果5位一层,最大层数只有51 层,不过多数情况下已经够用了。用本方法在统计信息的时候非常方便:

select * from table where ProgramID like '00001*'

https://www.360docs.net/doc/6d15400327.html, 原创文章,作者本人对文章保留一切权利。

如需转载必须征得作者同意并注明本站链接

适用环境:

所有Access 环境

关键字:

设计表结构,treeview >>>

相关文章

没有手动相关文章

关于产品名称、客户名称的表结构定义

新手来看:如何设计数据库结构

评论

没有相关评论

查看或发表更多的评论,请单击这里。

https://www.360docs.net/doc/6d15400327.html, | a9BBS | OTaA System |

建站日期:2000年4月2日| 设计施工:陈格( access911 & cg1 ) Copyright © 2000 - 2003 COMET, 陈格保留所有

C#操作Excel

sql 中获得刚插入的主键id

c#语言https://www.360docs.net/doc/6d15400327.html,实现treeview控件读数据库动态生成树的代码

C#.NET开发技术 2008-07-04 11:52 阅读2091 评论1

字号:大中小

1.下载地址

https://www.360docs.net/doc/6d15400327.html,/downloads/samples/internet/ASP_DOT_NET_ServerControls/WebCont

rols/default.asp

安装后,通过“自定义工具箱”->“.net框架组件”把TreeView添加到工具箱里

2.运行时无法显示

一般是TreeView的版本问题,最好下载英文版自动安装版本重新安装,安装前应该先到添加删除程

序里卸掉原版本

3.显示格式出错(非树状显示)

TreeView要求客户端浏览器版本为IE5.5及以上,最好要求客户端升级为IE6.0

4.框架里使用TreeView

设置NavigateUrl、Target属性,可更新另外的Frame

5.找不到TreeNode类

使用TreeView,最好添加namespace:using Microsoft.Web.UI.WebControls;

6.遍历TreeView节点(递归算法)

private void Page_Load(object sender, System.EventArgs e)

{

GetAllNodeText(TreeView1.Nodes);

}

void GetAllNodeText(TreeNodeCollection tnc)

{

foreach(TreeNode node in tnc)

{

if(node.Nodes.Count!=0)

GetAllNodeText(node.Nodes);

Response.Write(node.Text + " ");

}

}

7.得到node结点的父节点

TreeNode pnode;

if(node.Parent is TreeNode)

pnode=(TreeNode)node.Parent;

else

//node is root node

8.修改TreeView样式(示例)

用代码:

TreeView1.DefaultStyle["font-size"] = "20pt";

9.TreeView展开无闪烁的解决方法

已经无数次见到有人提出这个问题了。。。。。

用.net控件TreeView而展开时不刷新的变通方法主要有以下步骤:

1。在Page_Load中为你的TreeView添加以下属性,这句话为TreeView添加Click时的回发事件。

TreeView1.Attributes["OnClick"] = @"javascript: window.setTimeout('__doPostBack(\'TreeView1 \',\'\')', 0, 'JavaScript')";

2。在.aspx页面文件中添加一个隐藏的Button用来产生TreeView的回发事件:

这个Button必须为Html控件,并将其转为在服务器端运行。

style="DISPLAY:none;"该句用来在页面隐藏Button。

在https://www.360docs.net/doc/6d15400327.html,的设计界面双击该Button产生以下事件:

private void Button1_ServerClick(object sender,System.EventArgs e)

{

}

这里不用添加任何代码,目的是当服务器处理该页面并发送给客户端时产生下面客户端脚本:

这段代码用于回应TreeView的Click事件。。。。。。。。。。。。。。。。。。。此代码不用手工添加。。。。。

3。好。。。大功告成。。。为你的TreeView添加TreeView1_SelectedIndexChange事件:

在设计界面,TreeView上右键属性。。。事件。。找到SelectedIndexChange。。。双击。。在cs文件中产生。。

private void TreeView1_SelectedIndexChange(object sender, Microsoft.Web.UI.WebControls.T reeViewSelectEventArgs e)

{

}

在里面添加测试代码。。。

Microsoft.Web.UI.WebControls.TreeNode NewNode=TreeView1.GetNodeFromIndex(TreeView1.Selec tedNodeIndex);

Response.Write(NewNode.GetNodeIndex());

。。。。。。。。OK。。。。。。。。。。。。。。。。

测试地址。。。。https://www.360docs.net/doc/6d15400327.html,/ganggang/tree.aspx。。。有点慢大家谅解。。。

有什么问题请提出。。。。。。呵呵。。。。。

https://www.360docs.net/doc/6d15400327.html,/Expert/topic/1300/1300576.xml

客户端控制TreeView

客户端操作TreeView一直是比较头疼的问题,但也比较实用。好好研究了一下TreeView.htc,找到以下方法,不要告诉我你早已知道而懒得说:)

1.设置所选节点,如选中第二个节点

function SetSelNode()

{

TreeView1.selectedNodeIndex="1";

}

2.得到所选节点的Text,ID或NodeData

function GetAttribute()

{

alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text"));

}

替换Text为ID或NodeData,可分别得到所选节点的ID或NodeData

3.修改节点属性,如修改第一个节点的Text

function ModifyNode()

{

var node=TreeView1.getTreeNode("0");

node.setAttribute("Text","hgknight");

}

4.得到点击节点

function TreeView1.onclick()

{

alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("Text"));

}

5.添加节点

function AddNode()

{

var node=TreeView1.createTreeNode();

node.setAttribute("Text","hgknight");

TreeView1.add(node);

}

https://www.360docs.net/doc/6d15400327.html,/Expert/topic/1382/1382892.xml

1.设置所选节点,如选中第二个节点

function SetSelNode()

{

TreeView1.selectedNodeIndex="1";

}

2.得到所选节点的Text,ID或NodeData

function GetAttribute()

{

alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text"));

}

替换Text为ID或NodeData,可分别得到所选节点的ID或NodeData

3.修改节点属性,如修改第一个节点的Text

function ModifyNode()

{

var node=TreeView1.getTreeNode("0");

node.setAttribute("Text","hgknight");

}

4.得到点击节点

function TreeView1.onclick()

{

alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("Text")); }

5.添加节点

function AddNode()

{

var node=TreeView1.createTreeNode();

node.setAttribute("Text","hgknight");

TreeView1.add(node);

}

6.js遍历所有节点

//只针对根结点,大家把它可改为递归形式

var NodeArray=new Array();

NodeArray=TreeView1.getChildren();

for(i=0;i

{

cNode=NodeArray[i];

alert(cNode.getAttribute("Text"));

}

1、用代码在treeview web控件中,添加node的方法

表字段:编号,父编号,名称

数据:

1 0 中华人民共和国

Access Treeview 应用实例

《Access Treeview 应用实例》 使用说明: 本程序可在各种支持VBA语言的软件上直接使用,其中MS Access已成功测试具体步骤为: 1、在Access里创建一个tblTreeview的数据表如下图: 2、在Access里创建一个frmTreeview的窗体,在窗体里创建一个Treeview1的Treeview控件和一个 ImageList1的ImageList控件如下图:

3、然后把程序复制到frmTreeview窗体的加载事件当中如下图: 4、最终效果如下图:

程序: Private Sub Form_Load() On Error Resume Next Dim strParent As String, strChild As String, MyNode As Node Me.Treeview1.Nodes.Clear '清除Treeview的所有旧节点 Me.Treeview1.ImageList =Me.ImageList1.Object '把图标加载到每个节点前面 Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblTreeview", dbOpenSnapshot, dbReadOnly) 'Treeview 节点数据来源 While Not rst.EOF strChild = rst!ChildID If rst!ChildID <> rst!ParentID Then strParent = Mid(rst!ParentID, 1, Len(rst!ParentID) - Len(rst!ChildID) - 1) Set MyNode = Me.Treeview1.Nodes.Add(strParent, tvwChild, rst!ParentID, rst!ChildID, "A1", "A3") '加载子节点 Else strParent = rst!ChildID Set MyNode = Me.Treeview1.Nodes.Add(, , strChild, rst!ChildID, "A1", "A3") '加载父节点End If rst.MoveNext Wend rst.Close '关闭数据集 Me.Treeview1.HideSelection = False '离开焦点后有阴影 End Sub

数据绑定技术总结

数据绑定技术总结 关于数据绑定技术,现在做如下总结: 先看如下代码: //数据绑定 protected void DataBind() { if (type == 0) { string connectionstring = @"Server=.;database=db_user;uid=sa;pwd=123456"; SqlConnection myconnection = new SqlConnection(connectionstring); //链接数据库 myconnection.Open(); SqlDataAdapter da = new SqlDataAdapter("select * from Day6tb_user order by u_ID asc", myconnection); DataTable dt = new DataTable(); da.Fill(dt); gvlist.DataSource = dt; gvlist.DataBind();//调用DataBind放法 myconnection.Close(); } else { string connectionstring = @"Server=.;database=db_user;uid=sa;pwd=123456"; SqlConnection myconnection = new SqlConnection(connectionstring); myconnection.Open(); SqlCommand cmd = new SqlCommand("select * from Day6tb_user where u_Name like '%'+@name+'%' order by u_ID asc",myconnection);

VB控件 treeview用法详解

VB TreeView控件使用详解 (2012-06-16 15:08:16) 标签:分类: 第一小时:学习直接用代码将数据填充到树控件中。 为什么要先学习直接用代码将数据填充到树控件中因为这种方法是最简单的,代码也最容易理解,学习树控件,先将这个学会,已经掌握了一半,所以先不要急着想怎么将表中的数据填充到树控件中,在第一小时里,树控件和表完全没有关系。 目的:我们要在树控件中建立如下的一个3层级关系 水果 | |__苹果 | |__红富士 | |__国光 | |__葡萄 |__红提子 |__青提子 解释:水果包含2种,一种是苹果,一种是葡萄,苹果又包含2种,一种是红富士,一种是国光,葡萄也如此。 在这里:“爷”是水果,“父”是苹果,葡萄,“子”是红富士,国光,红提子,青提子。概括如下: 爷(只能有一个):水果 父(这里有2个):父1:苹果;父2:葡萄

子(这里有4个):子1:红富士(父1苹果的子);子2:国光(父1苹果的子);子3:红提子(父2葡萄的子);子4:青提子(父2葡萄的子) 1、新建一个窗体,在窗体上放置两个控件,一个是Treeview,一个是Imagelist 如何找到这两个控件 Treeview控件在“工具箱”的榔头加扳手图标(其他控件)中选“Microsoft Treeview Control,Version " Imagelist控件在“工具箱”的榔头加扳手图标(其他控件)中选“Microsoft Imagelist Control,Version " Treeview控件大家都明白干什么用的,Imagelist控件是干什么用呢原来这个控件是放图标用的,如果你想在树控件中显示图标的,这个图标都将储存在ImageList控件中。 2、设置这两个控件的属性 首先要讲清楚控件的属性设置有2种,一种是设置这个控件在ACCESS中的属性,比如名称等。一种是设置这个控件本身的属性。要设置这个控件在ACCESS中的属性,选中控件后按鼠标右键选“属性”就可以了。跟我们平时设置文本框什么的一样。要设置这个控件本身的属性,只要双击这个控件就可以了。 1)设置Treeview控件在ACCESS中的名称属性,将名称设置为“Treeview" 2)设置Imagelist控件在ACCESS中的名称属性,将名称设置为“Image" 2)设置Imagelist控件本身的属性,双击控件后,在弹出来的设置框中选“Images",单击“Insert Picture"按钮,在你电脑中选择你需要的图标。在“Key:”栏中填入“K1”。其他默认设置不用改。3)设置Treeview控件本身的属性,双击控件后,在弹出来的设置框中选“General”,在这个选项面版中有很多项设置,大多数是设置树控件的显示格式,你自己慢慢研究。这里我们将第一项“Style"选7,在第五项“Imagelist"选项中将我们放置的Imagelist控件“Image"选上。这项设置就将图标和树控件联系了起来。 3、写代码将数据填充到树控件中

TreeView绑定SQL数据源

使用TreeView绑定SQL数据源 这里采用了在页面一loading就把数据绑到TreeView的各节点的方式,而不是在展开时再作子节点的绑定,因此在点击父节点时就不会有刷新的感觉了。呵呵,代码并没优化....... aspx页面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> 树形节点绑定

.cs文件: using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindTree(); } } public void BindTree() { SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CreativeConnectionString"].Connectio

第20次课第六章 数据绑定技术基础

新课导入: 复习上次课所讲的内容。 教学过程: 第六章数据绑定技术 6.1 绑定技术基础 在https://www.360docs.net/doc/6d15400327.html,中,开发人员可以使用声明式的语法对控件进行数据绑定,而且大多数服务器控件都提供了对数据绑定的支持。数据绑定表达式的语法格式为: <%#数据源%> 数据绑定允许在控件的声明代码中为控件的某个属性指定一个绑定表达式,从而将表达式的内容与该控件进行绑定。 6.1.1 简单绑定 简单绑定一般只绑定单个值到某个控件,所以数据源可以是表达式、变量、方法、控件的属性等。 1.当绑定到Label、TextBox等控件时,需要将绑定表达式赋值给控件的Text属性: Text=’<%#数据源%>’ 2.采用数据绑定技术还可以使用javascript调用C#定义的变量和方法,此时可以将绑定表达式赋值给一个javascript变量: var a=’<%#数据源%>’ 简单绑定需要注意以下几点: (1).数据绑定表达式只有在父控件容器中的DataBind()方法被调用时才会被执行。DataBind()是Page和所有服务器控件的方法,通常在Page_Load事件中被调用。可将上例中的Page.DataBind();语句注释掉,再看一下运行结果。 (2).绑定变量和方法的返回值时,该变量和方法必须声明为public或protected类型,否则会提示错误:“╳╳╳不可访问”,因为它受保护级别限制。 (3).如果数据绑定表达式中使用了双引号,则<%#数据源%>的最外层要用单引号,否则会提示“服务器标记的格式不正确”的错误信息,其他情况下使用双引号或者单引号都可以。将下面语句的单引号改成双引号即可得到印证。 ’>

treeview控件应用

树形结构控件TreeView TreeView是一种 能以树形目录结构形式 显示数据的高级控件, 显示方式类似于 Windows的资源管理 器,能分层展开各结点 的子目录,也能收缩各 结点的子目录。本节将 先介绍TreeView控件 的一些基本概念、属性 与方法,再举例说明 TreeView控件的应用。 TreeView控件概述、属性与方法 1、作用:用于显示Node结点的分层列表。 2、添加到控件箱 菜单命令:工程 | 部件,在部件对话框中选择:Microsoft Windows Common Controls 6.0 3、TreeView控件的属性 (1)属性对话框 用鼠标右键单击TreeView 控件,在弹出式菜单中选择属 性,进入属性设置对话框,该 对话框分为通用、字体、图片 三个选项卡,如图8.6所示。

①样式(Style):返回或设置在Node结点之间显示的线样式,如表8.6所示。 ②鼠标指针(MousePoint):可选择不同鼠标样式,如表8.1所示。 ③线条样式(LineStyle):0-tvwTreeLine 无根结点的树形结构,1-tvwRootLines有根结点的树形结构。 ④标签编辑(LabelEdit):0-tvwAutomatic 自动,1-tvwManual 手工; ⑤图像列表(ImageList):结点图标所用ImageList控件; ⑥边框样式(BorderStyle):0-ccNone无边框,1-ccFixedSingle单边框; ⑦外观(Appearence):0-ccFlat平面效果,1-cc3D 3D效果; ⑧缩进:父子结点的水平间距。 (2)其它属性 ①SelectedItem.Text属性:用于返回或设置当前Node结点的内容。 ②CheckBoxes属性:该属性只能取逻辑值,若取True值,则每个Node结点前出现一个复选框,否则不出现复选框。 4、TreeView控件的方法 (1)Node结点 ①Node结点:是TreeView控件中的一项,它包含图像与文本。 ②Nodes结点集合:包含一个或多个Node结点。 (2)Add方法 ①作用:为TreeView控件添加节点和子节点。 ②定义格式 TreeView1.nodes.Add(Relative,Relationship,Key,Text, Image,SelectedImage) 其中: ◆Relative参数:添加新结点时,其父结点键值Key。添加根结点时,此项为空。 ◆Relationship参数:新结点的相对位置: tvwlast—1:新节点位于同级别所有节点之后; tvwNext—2:新节点位于当前节点之后; tvwPrevious—3:新节点位于当前节点之前; tvwChild—4:新节点成为当前节点的子节点。 ◆Key:Node结点关键字(唯一标识符),用于检索Node结点。同时也作为其新建子结点的Relative值,即新建子结点的Relative=父结点Key。 ◆Text:Node结点文本。 ◆Image:Node结点位图,是关联ImageList控件中位图的索引。

采用HierarchicalDataTemplate数据模板和treeview在MVVM模式下实现行政区划树

摘要:采用HierarchicalDataTemplate数据模板和treeview在MVVM模式下实现行政区划树, 支持勾选。勾选父节点,子节点回全部自动勾选;子节点部分勾选时,父节点半勾选;子节点全部勾选时,父节点勾选。反之亦然。 HierarchicalDataTemplate是分层数据模板,通常用于tree,menu等层级控件。 HierarchicalDataTemplate的ItemsSource属性绑定下一级数据源。 Model为行政区数据实体类,通常访问数据库获取数据并构建对象。 ViewModel为界面的抽象模型,表示界面的数据和行为,是Model和View的桥梁。 view就是界面。 一、代码 1、Model using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace WpfHierarchicalTemplate { public class District { public int ID { get; set; } public string Xzqhdm { get; set; }//行政区划代码 public string Xzqhmc { get; set; }//行政区划名称 public int Level { get; set; }//级别,0全国,1省,2地市,3县,4,乡镇,5,村 public IList Children { get; set; } public District Parent { get; set; } } } 2、ViewModel using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections.ObjectModel; using System.Windows.Media; using System.Windows.Media.Imaging; namespace WpfHierarchicalTemplate { publicclass DistrictNodeViewModel :ModelCommon.NotifyObject { privatebool? isSelected = false; publicbool? IsSelected { get{ return isSelected; } set { isSelected = value; RaisePropertyChanged("IsSelected");

delphi中TreeView控件使用

DELPHI中利用TreeView控件建立目录树2000-06-26 00:00:00·-·中国计算机报社 p>Rainbow的话:关于TreeView的使用,还可以参看:联合使用TreeView 组件 TreeView是一个显示树型结构的控件,通过它能够方便地管理和显示具有层次结构的信息,是Windows应用程序的基本控件之一。DELPHI虽然具有比较强大的文件管理功能,提供了多个用于文件管理的标准控件,如DriveComboBox、DirectoryListBox、FileListBox等,通过设置它们的属性,使其建立起联系,甚至不用编写一行程序,我们就可以实现在不同的目录之间进行切换,然而这样的目录切换只适用于进行文件的查找定位,而不能方便地进行目录的浏览,例如我们要从c:\windows目录转到c:\program files目录,就必须返回到根目录才能进行切换,而不能象Windows资源管理器那样任意地在不同的目录之间进行浏览与切换。 要实现在不同目录之间任意切换和浏览,还是需要使用TreeView控件,以下程序就利用DELPHI的TreeView控件来建立目录树。 在该程序中采用的各部件以及界面设计如下图所示: 各部件的主要属性设置如下: 部件属性属性值form name caption form1 ‘目录浏览’ drivecommbobox name visible drivecommbobox1 false filelistbox name visible filetype filelistbox1 false fddirectory imagelist name imagelist1 treeview name images 该程序利用DriveCommboBox控件来获得系统具有的驱动器,并以此作为目录树的最上层,利用FileListBox控件,通过设置其Filetype属性为fdDirectory,可以获得所需的子目录,在TreeView控件的OnExpanding事件中将得到的子目录加到该控件的某一节点下。

C_-TreeView控件使用方法

TreeView 控件显示Node 对象的分层列表,每个Node 对象均由一个标签和一个可选的位图组成。 本文主要介绍C# treeView控件中,添加,修改、删除节点等c# treeview控件的使用方法。 其代码如下: 1.private void Form1_Load(object sender, EventArgs e) 2.{ 3. https://www.360docs.net/doc/6d15400327.html,belEdit = true;//可编辑状态。 4. 5.,这个结点是根节点。 6. TreeNode node = new TreeNode(); 7. node.Text = "hope"; 8. treeView1.Nodes.Add(node); 9. TreeNode node1 = new TreeNode(); 10. node1.Text = "hopeone"; 11. TreeNode node11 = new TreeNode(); 12. node11.Text = "hopeoneone"; 13. TreeNode node2 = new TreeNode(); 14. node2.Text = "hopetwo"; 15. node1.Nodes.Add(node11);//在node1下面在添加一个结点。 16. node.Nodes.Add(node1);//node下的两个子节点。 17. node.Nodes.Add(node2); 18. 19. TreeNode t = new TreeNode("basil");//作为根节点。 20. treeView1.Nodes.Add(t); 21. TreeNode t1 = new TreeNode("basilone"); 22. t.Nodes.Add(t1);

C# 里TreeView绑定数据库实现分类

C# 里TreeView绑定数据库实现分类 分类:导航控件TreeView/Menu/SiteMapPath 2010-03-22 21:33 45人阅读评论(0) 收藏举报 codes=c#] //从数据库中读取数据 SqlConnection con = new SqlConnection("server=127.0.0.1//sqlexpress;uid=sa;"); con.Open(); con.ChangeDatabase("STggggg"); SqlCommand cmd = new SqlCommand("select * from 产品树where NodeType='f'", con); //https://www.360docs.net/doc/6d15400327.html,mandType = CommandType.StoredProcedure; SqlDataAdapter sda = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); try { sda.Fill(ds); } catch { } finally { cmd = null; con.Close(); } //往TreeView中添加树节点 //添加根节点 TreeNode tn = new TreeNode(); tn.Text = "所有产品"; https://www.360docs.net/doc/6d15400327.html, = "0";//Name作为ID tn.Tag = "0";//Tag作为RootID tn.ImageIndex = 0; tn.SelectedImageIndex = 0; tv.Nodes.Add(tn);//该TreeView命名为tv tv.SelectedNode = tv.TopNode;

C# TreeView介绍与使用

C# TreeView中的使用-wwj TreeView组件是由多个类来定义的,TreeView组件是由命名空间"System.Windows.Forms"中的"TreeView"类来定义的,而其中的节点(即Node),是由命名空间"System.Windows.Forms"中的"TreeNode"来定义的。所以当在程序中创建一个TreeView对象,其实只是创建了一个可以放置节点的"容器"。而在这个容器中加入一个节点,其实就是加入了从"TreeNode"类中创建的一个节点对象;同样删除一个节点,也就是删除一个"TreeNode"节点对象。 一. C#操作TreeView组件中的一些常用方法以及具体实现: TreeView组件虽然是一个操作起来比较麻烦的组件,但归根到底,可以总结为三种基本操作:加入子节点、加入兄弟节点和删除节点。掌握了这三种常用操作,对于在编程中灵活运用TreeView组件是十分必要的。下面就分别来加以介绍。 (1).加入根节点、子节点: 所谓根节点是指没有父节点、但具有一个或多个子节点的节点。初始创建根节点的代码如下: TreeNode rootnode = new TreeNode("根节点"); treeView1.Nodes.Add(rootnode); 如果要加入多个根节点。则每个根节点要对应一个TreeNode,然后再创建。 所谓子节点,就是处于选定节点的下一级节点。加入子节点的具体过程是:首先要在TreeView组件中定位要加入的子节点的位置,然后创建一个节点对象,然后利用TreeVeiw类中对节点的加入方法(即:Add ( )方法),加入此节点对象。下面就是在treeView1组件中加入一个子节点的具体代码: //首先判断是否选定组件中的位置 if ( treeView1.SelectedNode == null ) { MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , https://www.360docs.net/doc/6d15400327.html,rmation ) ; } else { //创建一个节点对象,并初始化 TreeNode tmp ; tmp = new TreeNode ( "节点名称" ) ; //在TreeView组件中加入子节点 treeView1.SelectedNode.Nodes.Add ( tmp ) ; treeView1.SelectedNode = tmp ; treeView1.ExpandAll ( ) ; }

Treeview 控件的简单应用

Treeview 控件的简单应用: 在VB中Treeview 控件的添加: 通过VB菜单,[工程] -- [部件],然后勾选Microsoft Windows Common Controls 6.0 (SP6),[确定]。 在工具箱里就有了Treeview 控件的图标。 Treeview 控件具有显示类似目录层次结构的格式,在具体应用中很有实际意义。下面简单介绍。 一.在Treeview 控件中添加1个新节点: 在Treeview 控件中添加1个新节点,是通过Treeview 控件的Nodes 集合的Add方法添加一个Node 对象来实现的。 使用方法: Dim nodX As Node Set nodX = Treeview1.Nodes.Add(relative, relationship, key, text, image, selectedimage) 其中参数说明: Relative:可选的。已存在的Node 对象的索引号或键值。新节点与已存在的节点间的关系,可在下一个参数relationship 中找到。可以这样理解relative的作用,是新节点的位置的参照对象。 Relationship:可选的。指定的Node 对象的相对位置,如设置值中所述。本参数是相对参数relative而言。 Key:可选的。唯一的字符串,可用于用Item 方法检索Node。 Text:必需的。在Node 中出现的字符串。 Image:可选的。在关联的ImageList 控件中的图像的索引。 Selectedimage:可选的。在关联的ImageList 控件中的图像的索引,在Node 被选中时显示。 以上参数image和selectedimage,是设置节点文字左边的图形,以后详细举例说明。 例1: Set nodX = TreeView1.Nodes.Add(, , "R", "Root") 这是缺省了relative, relationship, image, selectedimage参数的实例,而key值用“R”,text 值用“Root”。 通常,缺省了relative, relationship的节点,是第1层节点。本例,生成了一个第1层节点,显示的文字为“Root”。 例2: Set nodX = TreeView1.Nodes.Add("R", tvwChild, "C1", "Child 1") nodX.EnsureVisible '这个方法EnsureVisible,使得新添加的子节点后,展开多层显示。 本例:relative为“R”,relationship为tvwChild,key为“C1”,text为“Child 1” 其功能是:建立1个新节点;该新节点是节点key值为“R”的子节点(tvwChild),而该新节点的key值用“C1”,text值用“Child 1”。 我们现在要为TreeView1控件添加新节点,可能有三种情况; 1)添加1个新的第1层节点。 Set nodX = TreeView1.Nodes.Add(, , "R1", "Root1")

vb TreeView 控件应用实例

vb TreeView 控件应用实例 2009-11-14 20:52 TreeView 控件应用实例:将 TreeView 绑定到 Biblio.mdb 数据库 应用示例:DataTree.vbp 本章的代码示例是从应用示例 DataTree.vbp which is listed in the Samples directory 中得到的。 可将数据库中的数据绑定到 TreeView 控件。下面的示例将 TreeView 控件绑定到 Biblio 数据库,该数据库可以在 Visual Basic CD 中找到。该应用实例将 Publishers 表作为树节点的第一层。如果一个出版商对应于一个或多个书名,则这些书名将作为该出版商的子节点加入树中。 图 2.42 与数据绑定的 TreeVew 控件 下面的代码用到了如下对象: Data Access Object Library(3.5) 名为“frmDataTree”的 Form 对象 名为“tvwDB”的 TreeView 控件 名为“cmdLoad”的 CommandButton 控件 将 Biblio.mdb 数据库绑定到 TreeView 控件 在工程中添加对数据访问对象(DAO 3.0)的引用。 为 Database 和 Node 对象创建模块级的变量。 在 Form Load 事件中,用 OpenDatabase 语句将 Database 对象变量设置为 Biblio 数据库。 用 Nodes 集合的 Add 方法创建顶层的节点对象。 在 CommandButton 的 Click 事件中,创建两个 Recordset 变量,并将它们设置为Publishers 和 Titles 表。

c#treeview绑定四级菜单

Winform中常常会涉及这方面的应用,用treeview来绑定四级部门,下面是我在实际经验中总结出来的一段代码,以供参考,并有注释 private void binds() { DataSet ds = new DataSet(); SqlConnection con = new SqlConnection(Maticsoft.DBUtility.DbHelperSQL.connectionString); string sql = "select CompanyName from CRM_CompanyInformationFirst"; SqlDataAdapter adapter = new SqlDataAdapter(sql, con); adapter.Fill(ds, "companyname"); foreach (DataRow row in ds.Tables["companyname"].Rows)//一级菜单绑定总公司 { TreeNode tn = new TreeNode(); https://www.360docs.net/doc/6d15400327.html, = row["companyname"].ToString(); tn.Text = row["companyname"].ToString(); treeView1.Nodes.Add(tn); DataSet d = new DataSet(); string ss = "select CompanyName from CRM_CompanyInformationSec where job_no='" + https://www.360docs.net/doc/6d15400327.html, + "'"; SqlDataAdapter da = new SqlDataAdapter(ss, con); da.Fill(d, "CompanyName"); foreach (DataRow rows in d.Tables["CompanyName"].Rows)//二级菜单绑定分公司 { TreeNode tnn = new TreeNode(); https://www.360docs.net/doc/6d15400327.html, = rows["CompanyName"].ToString(); tnn.Text = rows["CompanyName"].ToString(); treeView1.Nodes[tn.Index].Nodes.Add(tnn); DataSet dd = new DataSet(); string sss = "select CompanyName from CRM_CompanyInformationThird where job_no1='" + https://www.360docs.net/doc/6d15400327.html, + "' and job_no2='" + https://www.360docs.net/doc/6d15400327.html, + "'"; SqlDataAdapter daa = new SqlDataAdapter(sss, con); daa.Fill(dd, "CompanyName"); foreach (DataRow rowss in dd.Tables["CompanyName"].Rows)//三级菜单绑定部门 { TreeNode tnnn = new TreeNode();

delphi中treeview的使用

delphi中Treeview的使用介绍 每一个节点下子节点形成这一节点的Items属性,当前节点有一个唯一的Index(TreeNode的Index属性),用于说明子节点在Items 中的位置,每一个节点下的子节点是顺序编号的,第一个是0,第二个是1,依次类推。用IndexOf方法获得子节点的顺序,绝对顺序(AbsoluteIndex)则是指从Treeview第一个项开始的顺序值,第一个是0,如此推下去。Item属性则根据Index的值返回当前节点的第Index个子节点。Count则表明属于此项的所有子节点的数量。用MoveTo方法将Item由一个位置移到另一个位置。 Expanded属性表明是否所有的子项都全部展开(包括子项的子项),为True表示全部展开。IsVisible属性表明一个项是否在树中能被看到,如果树全部展开那么这个Item是肯定可以被看到。HasChildren属性表明一个项是否有子项。 GetFirstChild, GetLastChild, GetPrevChild, and GetNextChild分别返回当前项子项的第一个、最后一个和前一个、后一个项。GetNextSibling and GetPrevSibling则返回在同一Level下的下一个和上一个项。GetNextVisible and GetPrevVisible则返回能看得到的下一个和上一个项。如果一个节点有Parent,则HasAsParent方法返回True. Parent为当前项的父项。Focused属性确定焦点是否落在此节点上,被Focus时会一个标准的方框围住。很显然,只有一个节点会被聚焦。Selected属性表明一个节点是否被选中,同样只有一个节点会被选中。DropTarget属性表明节点在拖动操作中是源还是目标。

利用TreeView实现层次结构数据导航查询

文章发表于【《电脑开发与应用》】,引用请注明出处,谢谢! 利用TreeView实现层次结构数据导航查询 [摘要]:为了充分发挥TreeView控件展示数据和导航查询的作用,文章通过一个通讯录实例,介绍了如何在https://www.360docs.net/doc/6d15400327.html,中利用TreeView实现层次结构数据的加载及导航查询,讨论了如何做到精准导航查询。文章提出的改进的导航查询方案中的自定义函数,具有一定的借鉴意义。 [关键词]:https://www.360docs.net/doc/6d15400327.html,;TreeView;层次结构数据;导航查询 1.引言 C#是微软推出的基于.NET平台的开发语言,是一种使用简单、功能强大、表达力丰富的语言。Visual Studio 2008中,.NET在数据存取方面做了很大的调整。在.NET 框架下,数据存取是由https://www.360docs.net/doc/6d15400327.html,来完成的。https://www.360docs.net/doc/6d15400327.html,是一组用于和数据源进行交互的面向对象类库,通常情况下,数据源是数据库。 TreeView是一个重要的常用控件,经常充当导航器的作用。在实际的软件开发中,常常需要将TreeView 与数据库进行连接,以填充其节点。用TreeView可以显示诸如商品分类、区域名称等等的层次结构数据。在大部分软件的开发中,TreeView都是一个不可缺少的展示或者导航控件。TreeView的内容加载一般来讲有三种方式:(1)界面设计时在TreeView设计器或者代码中直接填充TreeView控件。(2)从XML文件中读取数据建立树型结构。(3)从数据库中读取数据,建立树型结构。本文将通过一个简单的通讯录实例,介绍如何在https://www.360docs.net/doc/6d15400327.html,中利用TreeView实现层次结构数据的导航查询。 2.数据表设计 本文TreeView控件的数据源,主要有三个字段:即分组号(id)、分组名称(groupName)、上一级分组号(parentId)。约定分组号作为用来标识当前分组的唯一标识。当分组的parentId为0时,表示该分组为顶级分组,否则parentId为一个大于0的值。如此形成一个具有层次结构的数据源。存放联系人分组的groups 表如表1所示。 表1 联系人分组groups表结构 构造groups表数据的内容如图1所示。 图1 groups表数据 另外,实例中还需要一个联系人信息表addressList,构造表中数据如图2所示,其中groupId字段用来标记联系人所在分组的组号。

delphi中TreeView控件使用

DELPHI中利用TreeView控件建立目录树 p>Rainbow的话:关于TreeView的使用,还可以参看:联合使用TreeView组件 TreeView是一个显示树型结构的控件,通过它能够方便地管理和显示具有层次结构的信息,是Windows应用程序的基本控件之一。DELPHI虽然具有比较强大的文件管理功能,提供了多个用于文件管理的标准控件,如DriveComboBox、DirectoryListBox、FileListBox等,通过设置它们的属性,使其建立起联系,甚至不用编写一行程序,我们就可以实现在不同的目录之间进行切换,然而这样的目录切换只适用于进行文件的查找定位,而不能方便地进行目录的浏览,例如我们要从c:\windows目录转到c:\program files目录,就必须返回到根目录才能进行切换,而不能象Windows资源管理器那样任意地在不同的目录之间进行浏览与切换。 要实现在不同目录之间任意切换和浏览,还是需要使用TreeView控件,以下程序就利用DELPHI的TreeView控件来建立目录树。 在该程序中采用的各部件以及界面设计如下图所示: 各部件的主要属性设置如下: 该程序利用DriveCommboBox控件来获得系统具有的驱动器,并以此作为目录树的最上层,利用FileListBox控件,通过设置其Filetype属性为fdDirectory,可以获得所需的子目录,在TreeView控件的OnExpanding事件中将得到的子目录加到该控件的某一节点下。 整个程序的源代码如下: unit main;

interface uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,FileCtrl,ComCtrls,ImgList; type TForm1=class(TForm) DirTreeView:TTreeView; FileListBox1:TFileListBox; DriveComboBox1:TDriveComboBox; ImageList1:TImageList; procedure FormCreate(Sender:TObject); procedure DirTreeViewExpanding(Sender:TObject;Node:TTreeNode;var AllowExpansion:Boolean); private {Private declarations} public {Public declarations} end; var Form1:TForm1; implementation {$R*.DFM} procedure TForm1.FormCreate(Sender:TObject); var FirstNode,DirNode:TTreeNode; ItemCount,Index:integer; Itemstr:string; begin ItemCount:=DriveComboBox1.Items.Count;//所有驱动器的个数 FirstNode:=DirTreeView.Items.GetFirstNode; for index:=0to ItemCount-1do begin ItemStr:=DriveComboBox1.Items[index]; ItemStr:=copy(ItemStr,1,pos(:,ItemStr));//获得驱动器的名称(比如C/D) DirNode:=DirTreeView.Items.AddChild(FirstNode,ItemStr); DirNode.HasChildren:=true; DirNode.ImageIndex:=0; DirNode.SelectedIndex:=1; end; end; //响应扩展事件 procedure TForm1.DirTreeViewExpanding(Sender:TObject;Node:TTreeNode;Var AllowExpansion:Boolean); var

相关文档
最新文档