C语言中使用TreeView控件与数据库操作 (c treeview 数据库)

在C语言编程中,TreeView控件被广泛应用于Windows平台。TreeView控件是一个树形控件,它能够显示复杂的层次结构。在实际应用中,TreeView控件可以与数据库操作结合使用,便于数据的快速管理和查询。

本文将介绍如何在。

一、TreeView控件的创建

在使用TreeView控件之前,首先需要创建它,并将它添加到Windows界面上。

TreeView控件的创建包含以下步骤:

1.在资源编辑器中,创建一个新的Dialog Resource。

2.添加TreeView控件到Dialog Resource中。

3.在代码中,使用CreateWindowEx函数创建TreeView控件。

4.使用SendMessage函数将TreeView控件添加到Dialog Resource中。

二、TreeView控件的基本操作

TreeView控件包含以下基本操作:

1.添加节点

在TreeView控件中,可以添加多个节点,用于显示层次结构。

使用TreeView_InsertItem函数可以添加一个新节点,该函数的参数包括父节点、子节点、节点文本、节点图标等。

2.修改节点

TreeView控件中的节点可以根据需要进行修改,例如修改节点文本、节点图标等。

使用TreeView_SetItem函数可以修改指定节点的信息。

3.删除节点

TreeView控件中的节点可以根据需要进行删除。

使用TreeView_DeleteItem函数可以删除指定节点。

4.查询节点

TreeView控件中的节点可以根据需要进行查询,例如查询指定节点的子节点数目、查询指定节点的文本等信息。

使用TreeView_GetCount函数可以查询TreeView控件中的节点数目,使用TreeView_GetItemText函数可以查询指定节点的文本信息。

三、TreeView控件与数据库操作结合使用

TreeView控件与数据库操作结合使用,可以实现对数据的快速管理和查询。

对于一个拥有多个节点的TreeView控件,可以将每个节点对应的数据存储在数据库中。在程序运行时,通过TreeView控件查询数据库中存储的数据,再将数据显示在TreeView控件中。

1.连接数据库

在使用TreeView控件与数据库操作结合使用之前,首先需要连接数据库。

使用ODBC API中的SQLConnect函数可以连接数据库。

2.查询数据

在与数据库操作结合使用时,需要通过TreeView控件查询数据库中的数据。

通过SQL语句可以在数据库中根据需要查询数据。例如,可以查询整张表中的所有数据,也可以查询特定的数据行。

查询的结果需要储存在数据集中。可以使用ODBC API中的SQLFetch函数获取数据集中的数据。

3.更新数据

在TreeView控件中修改节点的数据时,需要同步更新数据库中对应的数据。

使用TreeView_GetItem函数可以获取指定节点的信息,使用SQL语句可以将修改的数据存储到数据库中。

4.插入数据

向TreeView控件中添加新节点时,需要同步将数据插入到数据库中。

使用TreeView_InsertItem函数可以向TreeView控件中添加新节点,使用SQL语句可以将新节点对应的数据插入到数据库中。

5.删除数据

从TreeView控件中删除节点时,需要同步删除数据库中对应的数据。

使用TreeView_DeleteItem函数可以删除节点,使用SQL语句可以将指定的数据从数据库中删除。

四、注意事项

在使用TreeView控件与数据库操作结合使用时,需要注意以下问题:

1.安全性

在对数据进行操作时,需要注意数据的安全。例如,对输入的数据进行检查,防止SQL注入等恶意攻击。

2.性能

在程序中使用TreeView控件与数据库操作结合使用时,需要注意性能问题。例如,合理使用缓存技术,避免频繁查询数据库等。

3.可维护性

在编写程序时,需要注意程序的可维护性。例如,使用模块化设计,遵循面向对象编程原则等。

五、

本文介绍了如何在结合使用。在实际应用中,TreeView控件与数据库操作结合使用可以大大提高数据查询和管理的效率。但是,在使用时需要注意安全性、性能、可维护性等问题。

相关问题拓展阅读:

VB.NET中层次数据绑定TreeView的实现

提要:在VB 中 常将TreeView用来表示层次数据 但相关的与数据库进行交互的代码 需要大量的采用手工编码;在中 由于数据绑定功能的加强及语言特性的增强 可以很容易的实现TreeView与层次数据的绑定 本文将首先建立一个继承自TreeView的 dbTreeView 然后用一个单位(部渣裂门)的层次数据与dbTreeView进行数据绑定 并提供了与数据库进行交互的代码    从层次数据的表达方式开始  在本例中 部门表(department)中有五个字段 如下表: 字段名 字段 类型说明 ID 自动编号 Key Code String 编码 Name String 名称 PID Int 父结点的ID CPtr boolean 是否有子结点     继承自TreeNode的myTreeNode  在myTreeNode中 新增了三个属性 如下表: 属性名 类型 说明 Value Object Key PID Object 父结点的ID CPtr Boolean 是否有子结点    在Init事件友耐中 根据传入的四个参数 设置这三个属性和Text属性    将dbTreeView绑定到数据源 属性名 类型 说明 Datasource dataview dbTreeVIew的数据源使用dataview 而不是object Value Member string值成员(数据源的列名) Display Member string显示(在Text中)成员 Pid Member string父ID成员 CPtr Member string是否有子结点    后四个属性对应myTreeNode的value text pid cptr   相关代码如下: Protected Property DataSource() As Object Get  Return mDataView End Get Set(ByVal Value As Object)  If Value Is Nothing Then 好梁春 Else   mDataView = Value   cm = CType(Me BindingContext(mDataView) CurrencyManager)   UpdateTreeView()  End If End SetEnd PropertyProtected Property PidMember() As String Get  Return mPidMember End Get Set(ByVal Value As String)  mPidMember = Value End SetEnd PropertyProtected Property DisplayMember() As String Get  Return Join(mDisplayMember SplitChar) End Get Set(ByVal Value As String)  mDisplayMember = Split(Value SplitChar) End SetEnd Property 注意 这几个属性都是保护成员 必须在Init事件中设置:Public Sub Init(ByVal dispmember As String ByVal valuemember As String ByVal pidmember As String ByVal cptrmember As String ByVal datasource As DataView) Me ValueMember = valuemember Me DisplayMember = dispmember Me PidMember = pidmember Me CPtrMember = cptrmember Me DataSource = datasource  取value更大值 新增时将value+ 保证关健值唯一  Me mDataView Sort = Me ValueMember Me m_MaxID = Me GetValue(Me mDataView Count )End Sub

  设置DisplayMember属性的格式如:字段 ;字段 ;字段 …

  在设置属性时 将传来的参数转换为字符串数组mDisplayMember 在检索值时返回数据如:值 值 值 …

Protected Overridable Function GetDisplay(ByVal Index As Integer) As Object Dim i As Integer Dim temp As String =  For i = To mDisplayMember Length   temp = temp & IIf(i > LinkChar ) & mDataView(Index)(mDisplayMember(i)) Next Return tempEnd Function  其它检索值的函数请参见源程序 生成树  UpdateTreeView调用私有方法FillTree来生成树 需要注意的 FillTree只是生成指定结点的子结点并将其添加到指定结点 而不是一次就将所有结点添加到树中 如果未指定结点(之一次填充时) 只是添加顶层结点 Private Sub FillTree(ByRef pnode As myTreeNode Optional ByVal filter As String = ) mDataView RowFilter = filter Dim i As Integer icol As Integer Dim newnode As myTreeNode RemoveHandler cm PositionChanged AddressOf cm_PositionChanged Me BeginUpdate() For i = To mDataView Count()   newnode = New myTreeNode(GetDisplay(i) GetValue(i) GetPid(i) GetCPtr(i))   当有子结点时 为这个结点添加一个空子结点  If newnode CPtr Then   Dim nullnode As New myTreeNode()   nullnode Value = NoExpandNodeValue   newnode Nodes Add(nullnode)  End If  If pnode Is Nothing Then   Me Nodes Clear()   Me Nodes Add(newnode)  Else   pnode Nodes Add(newnode)  End If Next Me EndUpdate() mDataView RowFilter =  AddHandler cm PositionChanged AddressOf cm_PositionChangedEnd Sub  在展开有子结点的结点前 删除所有子结点 再用FillTree为待展开结点新增子结点 Private Sub dbTreeView_BeforeExpand(ByVal sender As Object ByVal e As System Windows Forms TreeViewCancelEventArgs) Handles MyBase BeforeExpand  当是新增结点引起BeforeExpand事件时 直接退出  If ExpandWhenAddNode Then Exit Sub  在展开结点前更新子结点 Dim currentnode As myTreeNode = CType(e Node myTreeNode) With currentnode   Nodes Clear()  FillTree(currentnode mPidMember & = & CInt( Value)) End WithEnd Sub   实现数据与绑定控件的同步  要实现两个方面的同步:   其它绑定控件(如textbox等)应与TreeView当前结点所指向的记录位置一致 Private Sub dbTreeView_AfterSelect(ByVal sender As Object ByVal e As System Windows Forms TreeViewEventArgs) Handles MyBase AfterSelect If e Node Is Nothing Then Exit Sub  定位到position cm Position = GetPosition(CType(e Node myTreeNode) Value) If AllowEdit Then  oldNode = e Node  oldPos = cm Position End IfEnd Sub   在其它绑定控件改变了数据源后 更新树结点 这个工作在触发CurrencyManager的PositionChanged事件时进行 Public Sub cm_PositionChanged(ByVal sender As Object ByVal e As System EventArgs) If CType(Me SelectedNode myTreeNode) Value GetValue(cm Position) Then  Debug WriteLine( Current node isn t correct point to currencymanager position! )  Me SelectedNode = FindNodeByValue(GetValue(cm Position) Me Nodes) End If If AllowEdit Then  If Me SelectedNode Is Nothing AndAlso cm Position = cm Count Then    当新增记录时 新增树结点   If CType(cm Current DataRowView) IsNew Then    Me SelectedNode = AddNode(cm Position)    Exit Sub   End If  End If  If Not oldNode Is Nothing Then   If CType(oldNode myTreeNode) Value = GetValue(oldPos) Then     更新老结点    oldNode Text = GetDisplay(oldPos)   Else   End If  End If End IfEnd Sub

  使用dbTreeView  程序运行后界面如下:    相关代码请参见源程序 这里不做详述

access中怎样实现树状结构

你是想制作一个表,然后用编程来实现吗?

详见:

TreeView 控件

TreeView 控件显示 Node 对象的分层列表,每个 Node 对象均由一个标签和一个可选的位图组成。TreeView 一般用于显示文档标题、索引入口、磁盘上的文件和目录、或能被有效地分层显示的其它种类信息。

语法

Treeview

说明皮隐纳

创建了 TreeView 控件之后,可以通过设置属性与调用方法对各 Node 对象进行操作,这些操作包括添加、删除、对齐和其它操作。可以编程展开与折回 Node 对象来显示或隐藏所有子节点。Collapse、Expand 和 NodeClick 三个事件也提供编程功能。

Node 对象使用 Root、Parent、Child、FirstSibling、Next、Previous 和 LastSibling 属性。在代码中可通过检索对 Node 对象的引用,从而在树上定位。也可以使用键盘定位。UP ARROW 键和 DOWN ARROW 键向下循环穿过所有展开的 Node 对象。从左到右、从上到下地选择 Node 对象。若在树的底部,携陆选择便跳回树的顶部,必要时滚动窗口。RIGHT ARROW 键和 LEFT ARROW 键也穿过所有展开的 Node 对象,但是如果选择了未展开的 Node之后再按 RIGHT ARROW 键,该 Node 便展开;第二次按该键,选择将移向下一个 Node。相反,若扩展的 Node 有焦点,这时再按 LEFT ARROW 键,该 Node 便折回。如果按下 ANSI 字符集 中的键,焦点将跳转至以那个字母开头的最近的 Node。后续的按该键的动作将使选择向下循环,穿过以那个字母开头的所有展开节点。

控件的外观有八种可用的替换样式,它们是文本、位图、直线和 +/- 号的组合,Node 对象可以任一种组合出现。

TreeView 控件使用由 ImageList 属性指定的 ImageList 控件,来存储显示于 Node 对象的位图和图标。任何时刻,TreeView 控件只能使用一个 ImageList。这意味着,当 TreeView 控件的 Style 属性被设置成显示图像的样式时,TreeView 控件中每一项的旁边都有一个同样大小的图像。

发行注意 TreeView 控件是 MSCOMCTL.OCX 文件中的一组 ActiveX 控件的一部分。为了在应用程序中使用 TreeView 控件,必须将 MSCOMCTL.OCX 文件

2. Sorted 属性(TreeView 控件)

返回或设置一值,此值确定 Node 对象的子节点是否按字母顺序排列。

返回或设置一值,此值确定 TreeView 控件的根层节点是否按字母顺序排列。

语法

object.Sorted

Sorted 属性语法包含下面部分:

部分 描述

object 对象表达式,其值是“应用于”列表中的一个对象。

boolean 布尔表达式,表示 Node 对象是否已被排序如“设置值”中描述。

 

设置值

boolean 的设置值是:

设置值 描述

True Node 对象根据它们的 Text 属性按字母顺序排列。其 Text 属性由数字开始的 Node 对象也作为字符串排序,之一个数字确定在排序中的初始位置,后面的数字确定以后的排序。

False Node 对象不排序。

说明

Sorted 属性有两种用法燃没,之一,在 TreeView 控件的根(顶)层排列 Node 对象,第二,对任何单个 Node 对象的立即子节点排序。例如,下面的代码是对 TreeView 控件的根节点排序:

Private Sub Command1_Click()

3. EnsureVisible 方法

这个方法确保指定的 ListItem 或 Node 对象是可视的。如果需要,这个方法可展开 Node 对象并滚动 TreeView 控件。该方法仅可滚动 ListView 控件。

语法

object.EnsureVisible

object 所在处代表一个对象表达式,其值是“应用于”列表中的一个对象。

返回值

值 描述

True 如果 ListView 或 TreeView 控件必须滚动与/或扩展以显露该对象,该方法返回 True。

False 如果不需滚动与/或展开,该方法返回 False。

说明

一个特定的 Node 或 ListItem 对象可能深藏于 TreeView 或 ListView 控件中,当要使其为可视时,使用 EnsureVisible 方法。

如果 Scroll 属性设置为 False,则该方法将不会在 TreeView 控件上起作用。

 

4. Node 对象和 Nodes

Node 对象是 TreeView 控件中的一项,它包含图像和文本。

Nodes 包含一个或多个 Node 对象。

语法

treeview.Nodes

treeview.Nodes.Item(index)

以上语法行,按照标准语法分别引用与中的单独元素。

treeview 对象表达式,其值是 TreeView 控件。

index 整数或字符串,它唯一地标识 Nodes 的一个成员。整数是 Index 属性的值,字符串是 Key 属性的值。

说明

节点可包含文本和图片。然而,要使用图片,必须用 ImageList 属性关联一个 ImageList 控件。

图片可以根据节点的状态而改变;例如,如果将 SelectedImage 属性设置为来自关联的 ImageList 的图像,则被选中的节点可拥有与未选中的节点不同的图片。

5. Add 方法(Nodes )

在 Treeview 控件的 Nodes 中添加一个 Node 对象。

语法

object.Add(relative, relationship, key, text, image, selectedimage)

Add 方法的语法包含下面部分:

描述

object 必需的。对象表达式,其值是“应用于”列表中的一个对象

relative 可选的。已存在的 Node 对象的索引号或键值。新节点与已存在的节点间的关系,可在下一个参数 relationship 中找到。

relationship 可选的。指定的 Node 对象的相对位置,如设置值中所述。

key 可选的。唯一的字符串,可用于用 Item 方法检索 Node。

text 必需的。在 Node 中出现的字符串。

image 可选的。在关联的 ImageList 控件中的图像的索引。

selectedimage 可选的。在关联的 ImageList 控件中的图像的索引,在 Node 被选中时显示。

设置值

relationship 的设置值是:

6. Root 属性(Node 对象)

返回对所选 Node 的根 Node 对象的引用。

语法

object.Root

object 所在处代表是对象表达式,其值是“应用于”列表中的对象

说明

Child、FirstSibling、LastSibling、Previous、Parent、Next 和 Root 各属性全将返回对另一个 Node 对象的引用。因此,可以同时引用并执行对 Node 的操作,如下所示:

With TreeView1.Nodes(x).Root

.Text = “New text”

.Key = “New key”

.SelectedImage = 3

End With

也可以将对象变量设置为被引用的 Node,如下所示:

Dim NodRoot As Node

‘得到对节点 x 的根的引用。

Set NodRoot = TreeView1.Nodes(x).Root

‘用此引用执行对根节点的操作。

With nodRoot

.Text = “New text” ‘改变文本。

.Key = “New key” ‘改变键。

.SelectedImage = 3 ‘改变 SelectedIma

 

7. Parent 属性(Node 对象)

这个属性返回或设置 Node 对象的父对象。仅在运行时可用。

语法

object.Parent

Parent 属性的语法包含下面部分:

部分 描述

object 对象表达式,其值是“应用于”列表中的一个对象。

node 变成该对象的父对象的 Node 对象。 

说明

在运行时,设置这个属性为一个对象的操作不能搞成一个循环,否则便发生错误。例如,不能将任何 Node 设置成为其后代的子 Node。

Child、FirstSibling、LastSibling、Previous、Parent、Next 和 Root 属性都返回对另一个 Node 对象的引用。所以可以同时引用并执行对一个 Node 的操作,如下所示:

With TreeView1.Nodes(x).Parent

.Text = “New text”

.Key = “New key”

.SelectedImage = 3

End With

也可以将对象变量设置为引用的 Node,如下所示:

Dim NodParent As Node

Private Sub TreeView1_DragDrop(Source As Control, x As Single, y As Single)

‘如果用户没移动鼠标,或在无效区释放它。

If TreeView1.DropHighlight Is Nothing Then

indrag = False

Exit Sub

Else

‘设置被拖动的节点的 parent 属性为目标节点。

On Error GoTo checkerror ‘阻止循环错误。

Set nodX.Parent = TreeView1.DropHighlight

Cls

Print TreeView1.DropHighlight.Text & _

” is parent of ” & nodX.Text

‘释放 DropHighlight 引用。

Set TreeView1.DropHighlight = Nothing

indrag = False

Exit Sub ‘如未发生错误则退出。

End If

checkerror:

‘定义表示 Visual Basic 错误代码的常数。

Const CircularError = 35614

If Err.Number = CircularError Then

Dim msg As String

msg = “A node can’t be made a child of its own children.”

‘显示带有一个感叹号图标

‘和“确定”与“取消”按钮的消息框。

If MsgBox(msg, vbExclamation & vbOKCancel) = vbOK Then

‘释放

9. Children 属性

这个属性返回包含在 Node 对象中的各子 Node 对象的个数。

语法

object.Children

object 所在处代表一个对象表达式,其值是“应用于”列表中的一个对象。

说明

在执行一个影响子节点的操作之前,可用 Children 属性检查 Node 对象是否有子节点。例如,以下代码在检索之一个 Node 的 Text 属性之前,使用 Child 属性检查子节点的存在。

Private Sub TreeView1_NodeClick(ByVal Node As Node)

If Node.Children > 0 Then

MsgBox Node.Child.Text

End If

End Sub

Children 属性示例

这个例子在 TreeView 控件中放置几个 Node 对象。这组代码检查 Node 是否有子节点。如果有,则显示子节点的文本。为试用此例,在窗体上安放一个 TreeView 控件,并在窗体的声明部分中粘贴下面的代码。运行此例,单击 Node 对象以选择它,然后单击该窗体来察看 Node 对象的子节点的文本。

Option Explicit

Private Sub Form_Click()

Dim strC As String

Dim N As Integer

If TreeView1.SelectedItem.Children > 0 Then ‘有子节点。

10. FirstSibling 属性(Node 对象)

这个属性返回对 TreeView 控件中的 Node 对象的之一个相邻对象的引用。

语法

object.FirstSibling

object 所在处代表一个对象表达式,其值是“应用于”列表中的一个对象

说明

之一个相邻节点是出现在一个节点层中之一个位置上的 Node。实际上到底是哪一个 Node 出现在之一个位置取决于在那一层上的 Node 对象是否被排序,这由 Sorted 属性确定。

Child、FirstSibling、LastSibling、Previous、Parent、Next 和 Root 属性都返回对另一个 Node 对象的引用。所以可以同时引用并执行对一个 Node 的操作,如下所示:

With TreeView1.Nodes(x).FirstSibling

.Text = “New text”

.Key = “New key”

.SelectedImage = 3

End With

也可以将对象变量设置为引用的 Node,如下所示:

Dim NodFirstSib As Node

‘获取 Node x 的之一个相邻节点的引用。

Set NodFirstSib = TreeView1.Nodes(x).FirstSibling

‘使用这个引用执行对之一个相邻 Node 的操

常数 值 描述 

树型机构要求数据库必须具有至少以下三个字卖衡段:

表(id,名称,父节点id)

至少具有以上字段才能造一颗树,

程序加载树很简单,一个递归指配胡,或一个循环唯拦就可以了

c treeview 数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c treeview 数据库,C语言中使用TreeView控件与数据库操作,VB.NET中层次数据绑定TreeView的实现,access中怎样实现树状结构的信息别忘了在本站进行查找喔。


数据运维技术 » C语言中使用TreeView控件与数据库操作 (c treeview 数据库)