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,这样可以永久改变在新建数据库 ...
随机推荐
- noip模拟测试20
考试总结:这次考试,我非常真实地感觉到了自己能力的提高,具体来说,在之前的考试中,读完题之后我只会想到暴力的思路,甚至有的题连暴力都打不出来,但是这次在考场上我已经有了自己的一些想法,有了一个深入思考 ...
- Vulhub-DC-1靶场
前言: DC-1靶场是Vulhub系一款渗透测试的实战靶场,拥有五个Flag.本篇博客讲述了如何拿去这五个Flag,并详细描述其中的注意点. 实验环境: 虚拟机环境:virtualbox 虚拟机1:D ...
- postman之get请求
get请求:
- PDL语言/ 盒图N-S/ PAD图
PDL语言 伪码伪代码 基本语法 算法用Begin开始,以End结束(如果只表示中间部分的算法可以不要) 每一条指令,占一行.指令的结束不用任何符号 注释 用"//"表示 用Pri ...
- Linux C中strcpy , strncpy , strlcpy 的区别
strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...
- Vue系列-04-项目1
路飞学城项目 项目搭建 创建项目目录 # cd 项目目录 # vue init webpack luffy 效果 根据上面的提示,我们已经把vue项目构建好了,接下来我们可以在vscode编辑器中把项 ...
- HttpClient执行post请求
public class Httpclient_post { private ResourceBundle bundle; private String url; private BasicCooki ...
- 软件开发目录规范 ATM框架构建
软件开发的目录规范 建立文件夹 为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要.软件的目录规范并无硬性标准,只要清晰可读即可 以ATM购物车项目为例: 首 ...
- 【AIOT】智能感知--物
From: https://liudongdong1.github.io/ 1. 物体检测 .1. 流体 D. V. Q. Rodrigues, D. Rodriguez and C. Li, &qu ...
- Angular Module 共享模块使用 父模块使用多个子模块
Component.module.ts import {BrowserModule} from '@angular/platform-browser'; import {LocationStrat ...