树形图控件(附加读取数据库)

树视图控件能够按层次结构组织和管理数据,通常用于显示树状结构数据。

先截个图 :


这个是程序的最终运行结果。其中树节点上的文本文字是从数据库中读取。

下面是程序步骤:
    
(1)新建一个基于对话框的应用程序TreeViewCtrl,在对话框中添加树视图控件。
    
(2)在类向导中将树视图控件命名为m_treectrl.
    
(3)选中树视图控件,右键点击属性,设置控件属性如图。

(4)因为要读取数据库,所以要首先链接数据库:

在stdafx.h文件中添加:

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace  rename("EOF","ADOEOF")

(5)在TreeViewCtrl.cpp中InitInstance()函数里添加:


/*********************************************************************************************************/
m_pCon.CreateInstance("ADODB.Connection");
m_pRecord.CreateInstance("ADBDB.Recordset");

try
{
m_pCon->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=医药管理.mdb;Persist Security Info=False";
m_pCon->Open("","","",-1);
}
catch(...)
{
AfxMessageBox("数据库连接失败.",0,0);
}

/******************************************************************************************************************/

(6)在TreeViewCtrlDlg.h中添加需要的成员变量和成员函数:

public:
CTreeCtrl m_treectrl;
void FindNode(HTREEITEM h_parent,CString str);
CImageList m_imagelist;
HTREEITEM h_root;

(7)在TreeViewCtrlDlg.cpp中CTreeViewCtrlDlg::OnInitDialog()函数里添加:


    //创建列表视图窗口
m_imagelist.Create(16,16,ILC_COLOR24|ILC_MASK,1,0);

//向图像列表中添加图标
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON3));

//关联图像列表
m_treectrl.SetImageList(&m_imagelist,TVSIL_NORMAL);

//添加根节点
h_root = m_treectrl.InsertItem("药品类别",0,1);

CString str;
//查询父类药品名称
m_pRecord = m_pCon->Execute("select * from leechdomkind where parenttype is null",0,adCmdText);

HTREEITEM h_parent;
while (! m_pRecord->ADOEOF)
{
str = (TCHAR*)(_bstr_t)m_pRecord->GetFields()->GetItem("leechdomtype")->Value;
h_parent = m_treectrl.InsertItem(str,0,1,h_root);
//将所有子节点添加到父节点下
FindNode(h_parent,str);
m_pRecord->MoveNext();
}

(8)在TreeViewCtrlDlg.cpp中实现FindNode(HTREEITEM h_parent, CString str)函数:


void CTreeViewCtrlDlg::FindNode(HTREEITEM h_parent, CString str)
{
_ConnectionPtr tempcon;
_RecordsetPtr temprecord;

tempcon.CreateInstance("ADODB.connection");
temprecord.CreateInstance("ADODB.recordset");

tempcon->ConnectionString = m_pCon->ConnectionString;
tempcon->Open("","","",-1);

CString sql;
sql.Format("select * from leechdomkind where parenttype = ‘%s‘",str);
temprecord = tempcon->Execute((_bstr_t)sql,0,adCmdText);
CString name;
HTREEITEM h_temp;
while (! temprecord->ADOEOF)
{

name =(TCHAR*)(_bstr_t) temprecord->GetFields()->GetItem("leechdomtype")->Value;
h_temp = m_treectrl.InsertItem(name,0,1,h_parent);
FindNode(h_temp,name);
temprecord->MoveNext();
}

}

至此这个例子所需要的程序已经写完了,数据库用的是Access2003。

时间: 2024-08-02 07:00:19

树形图控件(附加读取数据库)的相关文章

asp.net 不用控件 循环输出数据库数据的方法

不使用什么repeater gridview之类的控件,怎么才能输出数据库的数据到一个table ,我用response.write在后台,拼接 table 代码可以输出 但总是在页面的最上面 , 是不是要在aspx页面相应位置用<% %> 循环输出 但又提示找不到我后台填充的DATASET,因为听说公司做asp.net是不用控件的,想知道他们是怎么做输出数据库表格的,还请高手帮帮忙,谢谢了. 不明白来问我后台代码public string test = "";    pr

TreeView树形控件递归绑定数据库里的数据

TreeView树形控件递归绑定数据库里的数据. 第一步:数据库中查出来的表,字段名分别为UNAME(显示名称),DID(关联数据),UTYPE(类型) 第二步:前台代码 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="tree.aspx.cs" Inherits="Maticsoft.Web.tree" %> 2 3 <!DOCTYPE

C#在listview控件中显示数据库数据

一.了解listview控件的属性 view:设置为details columns:设置列 items:设置行 1.将listview的view设置为details 2.设置列属性 点击添加,添加一列 设置一列的Text属性,这就是列名 添加三列 3.编辑items属性,添加一行数据 编辑Text属性,添加一行的第一个数据 编辑subitems属性,添加一行中的其他数据 添加两个数据 填写结果 二.在listview中显示数据库数据 //在listview中显示数据库数据 private voi

Delphi中Undac控件连接MYSQL数据库问题总结

1.数据库挂到cxgrid上,中文显示不正确 我调试了好长时间,怀疑是编码问题,mysql的编码方式我都试过了,都不可以. 解决问题过程: (1).在dos系统下进入mysql数据库输入show variables like 'char%'; 我考虑可能是character_set_connection的编码有问题,于是开始设置它的编码方式,但是,这个编码方式重新启动数据库还是原来的编码方式.当然可以mysql数据库配置文件中设置,但是不是这个原因. (2).考虑到可能是数据库字符集编码方式问题

VS .net 如何利用VS自带的控件连接到数据库

最近在做算是学生时代相对大一点的项目,至少是我本人活到现在做的最大的了,一切都是从0开始学,每天解决几个小问题,我坚信一定可以做出来,可惜团队里的人都不想敲代码,不然有点气氛更好了,搞得自己跟苦行僧似的 1.在 Microsoft Visual Studio 中打开一个网站,添加一个 ASP.NET 页("Web 窗体"),并切换到"设计"视图. 2.从工具箱的"数据"组中,将 SqlDataSource 控件拖动到页面上. 3.在"S

DELPHI 使用dbexpress控件连接MySQL数据库方法

1. 在窗体上放置4个控件: SQLConnection1,SimpleDataSet1,DataSource1,DBGrid (注意: 如果 出现"Operation not allowed on unidirectional dataset"错误提示原因如下:). 在网上查到一篇文章如下: 错误描述:当使用dbExpress控件操作数据库时,用到sqlconnection1.sqlquery1.datasource1和dbgrid1.按顺序连接,当将dbgrid的DataSourc

Android——spinner控件实现读取xml资源,省、市两级互动

(1)首先在res文件夹下面的values中创建一个省市arrays.xml文件夹,如下 <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="province"> <item>-省份-</item> <item>河北省</item> <item>山西省</i

listview控件及其与数据库的连接

一.显示数据 1.视图 -----小三角--视图-Details,该选项最常用,选中之后会以表格样式呈现. 2.设置列头 ----右键--编辑列 --添加 先编辑列,再编辑项 编辑列右边的属性:Text是列名,DisplayIndex是显示列的顺序 3.添加行数据 ----右键--编辑项--添加 编辑项右边的属性:Text设置第一列的数据,SubItems集合设置其余列的数据////上边是手动添加随意数据 如果是用数据库的数据的话可以在数据库的数据之前额外添加一列序号放在li.Text里,方便查

android开发步步为营之24:milliondollars游戏技术要点代码生成控件和读取xml文件

Milliondollars智力问答游戏,主要的技术要点(一).读取题库数据xml文件(二).如何动态的生成题目和选项.这里做个总结,供以后参考. (一).读取题库数据xml文件 将assets/topics.xml文件读取 topics.xml格式: <?xml version="1.0" encoding="UTF-8"?> <book> <question topic="<全唐诗>是哪个时期的人编辑的?&qu