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

数据库表结构

定义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. 使用html2canvas.js将HTML生成图片

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Java8 Lambda表达式(二)

    目录 一.Java8 内置的四大核心函数式接口 1. 消费型接口 Consumer 2. 供给型接口 Supplier 3. 函数型接口 Function 4.断言型接口 Predicate 二.方法 ...

  3. Windows API 进程相关笔记

    0. 前言 最近做了一个进程信息相关的项目,整理了一下自己做项目时的笔记,分享给大家 1. 相关概念 1.1 HANDLE 概念 HANDLE(句柄)是Windows操作系统中的一个概念. 在Wind ...

  4. curl的基本使用

    基本使用 1. 初始化 初始化非常简单,只需要调用curl_init()函数即可,他会返回一个curl句柄,后边几乎其他关于curl的设置,关闭等函数都需要使用这个句柄 $curl = curl_in ...

  5. 『Java』String类使用方法

    Java中的字符串 java.lang.String类表示字符串类,Java程序中所有字符串文字都可以看作实现该类的实例. 特点: 字符串不可变:字符串的值在创建后不能在发生改变 public cla ...

  6. 关于Tomcat服务器的笔记

    javaWEB的概念: a)什么是 JavaWeb:             JavaWeb 是指,所有通过 Java 语言编写可以通过浏览器访问的程序的总称,叫 JavaWeb. JavaWeb 是 ...

  7. SaToken学习笔记-01

    SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...

  8. Linux下MySQL多实例部署记录

    什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的socket监听不同的服务端 ...

  9. Install Redmine on Virtual Machine with Vagrant

    Initialize VM: chad@typcserver ~/docs/vagrant-prj $ vagrant --version Vagrant 1.4.3 chad@typcserver ...

  10. SpringMVC学习04(数据处理及跳转)

    4.数据处理及跳转 4.1结果跳转方式 4.1.1 ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . 页面 : {视图解析器前缀} ...