TreeView和ListView数据库查询数据联动操作
好久不用了,重新整理下放这里以备需要使用,功能见图
数据库表结构
定义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数据库查询数据联动操作的更多相关文章
- MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)
知识点六:查询数据的操作DQL(SELECT基本形式)(26-35) CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8; USE ...
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- mongodb基础系列——数据库查询数据返回前台JSP(二)
上篇博客论述了,数据库查询数据返回前台JSP.博客中主要使用Ajax调用来显示JSON串,来获取其中某一个字段,赋给界面中的某一个控件. 那这篇博客中,我们讲解,把后台List传递JSP展示. Lis ...
- C#连接Oracle数据库查询数据
C#连接Oracle数据库可以实现许多我们需要的功能,下面介绍的是C#连接Oracle数据库查询数据的方法,如果您对C#连接Oracle数据库方面感兴趣的话,不妨一看. using System; u ...
- koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据
1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...
- mongodb基础系列——数据库查询数据返回前台JSP(一)
经过一段时间停顿,终于提笔来重新整理mongodb基础系列博客了. 同时也很抱歉,由于各种原因,没有及时整理出,今天做了一个demo,来演示,mongodb数据库查询的数据在JSP显示问题. 做了一个 ...
- 通过Java代码实现对数据库的数据进行操作:增删改查
在写代码之前,依然是引用mysql数据库的jar包文件:右键项目-构建路径-设置构建路径-库-添加外部JAR 在数据库中我们已经建立好一个表xs :分别有xuehao xingming xue ...
- [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值
本文来自:http://www.cnblogs.com/mrchenzh/archive/2010/05/31/1747937.html /****************************** ...
- python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析
1.确保数据库编码是utf8编码.若不是,请将my.ini的client,mysql,mysqld三个字段下面添加default-character-set = utf8,这样可以永久改变在新建数据库 ...
随机推荐
- Spring学习笔记-DI(依赖注入)
构造器注入(见前贴) Set注入[重点] 依赖注入:Set注入 依赖:bean对象的创建依赖于容器 注入:bean对象的所有属性由容器来注入 [环境搭建] 复杂类型 // Class Address ...
- C语言中变参函数传参探究
背景引入 近期在看一本书,叫做<嵌入式C语言自我修养>,写的内容对我帮助很大,是一本好书.在第6章,GNU C编译器扩展语法精讲一节,这本书给出了一些变参函数的例子: //1.变参函数初体 ...
- k8s之Service详解-Service使用
实验环境准备 在使用service之前,首先利用deployment创建出3个pod,注意要为pod设置app=nginx-pod的标签 创建deployment.yaml,内容如下 apiVersi ...
- 自动化可用到的Java读取Excel文件指定的行列数据
前言 在做接口自动化的时候,通常会遇到数据取用及存放的问题,一般有三种方式可选择 1.数据库存取 2.表格存取 3.项目配置文件存取 这里仅展示下第二种方式表格取数据的 示例 import org.a ...
- vue服务端渲染之nuxtjs
前言 本篇主要针对nuxtjs中的一些重要概念整理和代码实现! 在学习vue服务端渲染之前,先搞清楚几个概念: 什么是客户端渲染(CSR) 什么是服务端渲染(SSR) CSR和SSR有什么异同 客户端 ...
- 一键部署lnmp基本
#!/bin/bash systemctl stop firewalld systemctl disable firewalld setenforce 0 #--------nginx-------- ...
- 《手把手教你》系列技巧篇(二十一)-java+ selenium自动化测试-浏览器窗口的句柄(详细教程)
1.简介 今天本来就要分享和讲解三大延时等待的,但是在写作过程中发了问题,会用到这一个知识点,于是就提前介绍一下,以便后边用到了可以更好的理解和掌握.本文就是要介绍如何获得浏览器窗体的句柄或者叫编号, ...
- SpringBoot启动标识修改
在src/main/resources下新建一个banner.txt ${AnsiColor.BRIGHT_RED} ///////////////////////////////////////// ...
- 针对Hbuilderx内置终端无法输入问题,总结了三种方法供大家参考
下图,是内置终端无法输入的现象(本人使用的第三种方案,解决了该问题) 第一种解决方案,也是网上推荐最多的方案: 打开Hbuilder安装路径下插件文件夹中的main.js文件:HBuilderX\pl ...
- 利用pycharm创建DjangoWeb项目
1.打开pycharm开发工具:(开发服务器的搭建) File------->New Project-------->Django()