好久不用了,重新整理下放这里以备需要使用,功能见图

数据库表结构

定义TreeView addObject中data存储的记录集

type
PNode = ^TNode; TNode = record
id: Integer;
tcmc: string;
mxid: string;
end;

填充TreeView代码

procedure TForm1.FillTree(TreeView: TTreeView);
var
findq: TADOQuery;
node: TTreeNode;
p: PNode;
//这个方法是根据记录的id字段值,查找TreeView上的父节点
function FindParentNode(id: Integer): TTreeNode;
var
i: Integer;
begin
Result := nil;
for i := 0 to TreeView.Items.Count - 1 do
begin
//比较Node的Data值和记录的id值
if Integer(PNode(TreeView.Items[i].Data).id) = id then
begin
Result := TreeView.Items[i];
Break;
end;
end;
end; begin
findq := TADOQuery.Create(nil);
findq.ConnectionString := 'Provider=SQLOLEDB.1;Password=Sa123;Persist Security Info=True;User ID=demo;Initial Catalog=dd;Data Source=127.0.0.1';
try
TreeView.Items.BeginUpdate;
TreeView.Items.Clear;
findq.SQL.Text := 'SELECT c.id,c.tcmc,c.pid,c.mxid FROM 处方套餐 AS c WITH(NOLOCK) ORDER BY c.id';
findq.Open;
while not findq.Eof do
begin
//将数据放入结构体以便双击时使用
New(p);
p.id := findq.FieldByName('id').AsInteger;
p.tcmc := findq.FieldByName('tcmc').AsString;
p.mxid := findq.FieldByName('mxid').AsString;
//如果是最顶级,直接添加到TreeView
if findq.FieldByName('pid').AsInteger = 0 then
//将导航树保存在Node的Data中,以便查找用
TreeView.Items.AddObject(nil, findq.FieldByName('tcmc').AsString, TObject(p))
else
begin
//查找上级节点,存在上级节点添加子节点
node := FindParentNode(findq.FieldByName('pid').AsInteger);
if node <> nil then
TreeView.Items.AddChildObject(node, findq.FieldByName('tcmc').AsString, TObject(p));
end;
findq.Next;
end;
finally
findq.Free;
TreeView.FullExpand; //展开树
TreeView.Items.EndUpdate;
end;
end;

查询数据调用代码

procedure TForm1.Button1Click(Sender: TObject);
begin
FillTree(TreeView1);
end;

双击TreeView填充ListView

procedure TForm1.TreeView1DblClick(Sender: TObject);
var
mxid: string;
str: TStrings;
I: Integer;
strSql: TStrings;
QryTemp: TADOQuery;
begin
if not TreeView1.Selected.HasChildren then //当前选中是否含有子项,如果有则展开不执行操作
begin
str := TStringList.Create;
strSql := TStringList.Create;
QryTemp := TADOQuery.Create(Self);
try
QryTemp.ConnectionString := 'Provider=SQLOLEDB.1;Password=Sa123;Persist Security Info=True;User ID=demo;Initial Catalog=dd;Data Source=127.0.0.1';
//mxid值:107,108,109,110,111,112
mxid := PNode(TreeView1.Items[TreeView1.Selected.AbsoluteIndex].Data).mxid;
//根据分割符号添加mxid到StringList
str.Delimiter := ',';
str.DelimitedText := mxid;
//查询数据
strSql.Clear;
strSql.Add('SELECT a.DiagnosisProjectID, a.DiagnosisProjectName');
strSql.Add('FROM DDDiagnosisProject AS a WITH(NOLOCK) ');
strSql.Add('WHERE a.DiagnosisProjectID=' + QuotedStr(str[0]));
for I := 1 to str.Count - 1 do
begin
strSql.Add(' OR a.DiagnosisProjectID=' + QuotedStr(str[I]));
end;
strSql.Add('ORDER BY a.DiagnosisProjectID');
with QryTemp do
begin
Close;
SQL.Text := strSql.Text;
Open;
end;
//查询存在数据就添加数据到ListView
if QryTemp.RecordCount > 0 then
begin
QryTemp.First;
ListView1.Items.Clear;
while not QryTemp.Eof do
begin
with ListView1.Items.Add do
begin
Caption := QryTemp.FieldByName('DiagnosisProjectID').AsString;
SubItems.Add(QryTemp.FieldByName('DiagnosisProjectName').AsString);
end;
QryTemp.Next;
end;
end;
finally
str.Free;
strSql.Free;
QryTemp.Free;
end;
end;
end;

点击ListView点击行选中CheckBox

procedure TForm1.ListView1Click(Sender: TObject);
begin
ListView1.Items[ListView1.Selected.Index].Checked := not ListView1.Items[ListView1.Selected.Index].Checked;
end;

ListView全选

procedure TForm1.btnSelectAllClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to ListView1.Items.Count - 1 do
begin
ListView1.Items[I].Checked := True;
end;
end;

ListView取消选中

procedure TForm1.btnClearSelectClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to ListView1.Items.Count - 1 do
begin
ListView1.Items[I].Checked := False;
end;
end;

ListView反选

procedure TForm1.btnUnSelectClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to ListView1.Items.Count - 1 do
begin
ListView1.Items[I].Checked := not ListView1.Items[I].Checked;
end;
end;

查看ListView选中项

procedure TForm1.btnAllCheckedClick(Sender: TObject);
var
i: Integer;
s: string;
begin
Memo1.Clear;
for i := 0 to ListView1.Items.Count - 1 do
begin
if ListView1.Items[i].Checked then
begin
s := s + ListView1.Items[i].Caption + ':' + ListView1.Items[i].SubItems[0] + #13#10;
end;
end;
Memo1.Text := s;
end;

TreeView ListView操作联动示例代码

TreeView和ListView数据库查询数据联动操作的更多相关文章

  1. MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)

    知识点六:查询数据的操作DQL(SELECT基本形式)(26-35) CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8; USE ...

  2. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  3. mongodb基础系列——数据库查询数据返回前台JSP(二)

    上篇博客论述了,数据库查询数据返回前台JSP.博客中主要使用Ajax调用来显示JSON串,来获取其中某一个字段,赋给界面中的某一个控件. 那这篇博客中,我们讲解,把后台List传递JSP展示. Lis ...

  4. C#连接Oracle数据库查询数据

    C#连接Oracle数据库可以实现许多我们需要的功能,下面介绍的是C#连接Oracle数据库查询数据的方法,如果您对C#连接Oracle数据库方面感兴趣的话,不妨一看. using System; u ...

  5. koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据

    1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...

  6. mongodb基础系列——数据库查询数据返回前台JSP(一)

    经过一段时间停顿,终于提笔来重新整理mongodb基础系列博客了. 同时也很抱歉,由于各种原因,没有及时整理出,今天做了一个demo,来演示,mongodb数据库查询的数据在JSP显示问题. 做了一个 ...

  7. 通过Java代码实现对数据库的数据进行操作:增删改查

    在写代码之前,依然是引用mysql数据库的jar包文件:右键项目-构建路径-设置构建路径-库-添加外部JAR 在数据库中我们已经建立好一个表xs :分别有xuehao  xingming    xue ...

  8. [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值

    本文来自:http://www.cnblogs.com/mrchenzh/archive/2010/05/31/1747937.html /****************************** ...

  9. python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析

    1.确保数据库编码是utf8编码.若不是,请将my.ini的client,mysql,mysqld三个字段下面添加default-character-set = utf8,这样可以永久改变在新建数据库 ...

随机推荐

  1. 安装CDH6.2 agent报错

    界面报错信息提示如下: file /opt/cloudera/parcels/.flood/CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel...does not e ...

  2. .NetCore+Envoy+Id4+Dapr+EFCore 构建微服务之Envoy

    .NetCore比较流行的微服务应该时是用Ocelot的方式构建微服务,纯配置化,开发量也比较小.但是做过一些项目之后发现这个方式不是很适合,首先它比较笨重,其次不支持gRpc和webSocket通信 ...

  3. rancherUI添加configmap

    1.创建configmap 2.部署pod,挂载配置文件(通过卷的形式引用)

  4. SpringBoot开发十三-检查登录状态

    需求介绍-检查登录状态 防止用户知道我们的一些功能的链接,直接就进到了该页面,就像有些功能是管理员访问才能进的,就需要进行登录状态的判断. 我们知道这个功能点很多其他的功能点都需要使用,所以我们需要使 ...

  5. CentOS7 安装Oracle12c数据库

    在centos7上安装oracle是一个比较麻烦的事,在安装前需要做一些服务器的准备工作 我是在虚拟机里测试的所以需要下载centos7的镜像,可以去官网然后找到中国的镜像站用迅雷插件下载速度比较快这 ...

  6. 题解 queen(留坑)

    传送门 博客园突然打不开了,奇奇怪怪的-- 少写个等号没看出来 nm写反了没看出来 考完5min全拍出来了 手残属性加持 不对拍等于爆零 yysy,我连卢卡斯定理的存在都忘了-- 发现要让一大堆皇后能 ...

  7. 题解 block

    传送门 如果不想让next_permutation()自动忽略重复元素,可以在比较函数里加个rk之类的东西使它们不同(next_permutation()不用等于号) 关于第一问:貌似也是一个挺常见的 ...

  8. 【硬件模块】华为NBIOT 使用记录

    From: https://liudongdong1.github.io/ 1. background Low power wide area network (LPWAN) has become a ...

  9. SpringBoot枚举传参

    创建一个接口所有枚举继承 package com.gecko.charging.common; public interface BaseEnum { Integer getCode(); } 具体的 ...

  10. 【linux】tail 命令详解

    转自:https://www.cnblogs.com/fps2tao/p/7698224.html Linux命令:显示文件结尾 Head/Tail head 与 tail 就像它的名字一样的浅显易懂 ...