首页 > 数据库 >TreeView和ListView数据库查询数据联动操作

TreeView和ListView数据库查询数据联动操作

时间:2024-08-20 18:27:09浏览次数:11  
标签:ListView1 begin TreeView end Items 数据库 ListView findq

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

数据库表结构

定义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操作联动示例代码

本文来自博客园,作者:liessay,转载请注明原文链接:https://www.cnblogs.com/liessay/p/14954142.html

标签:ListView1,begin,TreeView,end,Items,数据库,ListView,findq
From: https://www.cnblogs.com/ynmsnc/p/18370035

相关文章

  • MySQL-MGR实战指南:打造企业级高可用数据库集群
    文章目录前言MGR的介绍事务处理流程:实验测试环境:结束语前言在数字化时代,企业的数据安全和业务连续性至关重要。想象一下,当关键业务数据存储在数据库中,而数据库突然出现故障,或者面临硬件故障、网络中断、自然灾害等不可预知的灾难性事件时,企业如何确保数据的完整性和......
  • 图数据库在社交网络分析中的应用
    图数据库在社交网络分析中的应用广泛且深入,其独特的数据结构和高效的查询能力为理解和分析复杂的社交网络关系提供了强有力的支持。以下将详细探讨图数据库在社交网络分析中的多个方面,包括用户关系建模、推荐系统优化、实时社交分析、影响力分析、欺诈检测与安全、知识图谱......
  • 图数据库之NebulaGraph
    NebulaGraph简介NebulaGraph是一款开源的分布式图数据库,专为处理大规模图数据而设计。它可以支持数十亿个顶点(节点)和数万亿条边(关系)的存储与查询,适用于需要处理复杂关系数据的应用场景,如社交网络分析、推荐系统、知识图谱、金融风控等。图数据相关分享请看 大数据之图数......
  • 一个AI原生数据应用数据库开发框架,专为数据3.0时代设计,支持私域问答、多数据源交互、
    前言在数字化转型的浪潮中,企业在数据处理和分析方面面临着巨大的挑战。传统软件往往存在复杂的数据库交互、低效的数据整合流程以及缺乏智能化数据分析能力等痛点。这些问题不仅拖慢了企业决策的步伐,也限制了创新的发展。因此,急需一款能够简化数据库交互、智能化数据处理的软......
  • 如何删除数据库下的所有表(mysql)
    要在MySQL中删除数据库下的所有表,你有两个主要选项:一个是删除整个数据库然后重新创建它,另一个是查询所有表的名称并逐一删除它们。下面是这两种方法的步骤:方法1:删除并重新创建数据库这种方法是最简单和最快的,但请注意,它会删除整个数据库,包括其中的所有表、视图、存储过程等。......
  • JSP学校新生入学管理系统设计与实现4om82(程序+源码+数据库+调试部署+开发环境)系统界面
    系统程序文件列表项目功能:学生,新生信息,类型开题报告内容JSP学校新生入学管理系统设计与实现开题报告一、研究背景与意义1.1研究背景随着信息技术的飞速发展,高校信息化管理水平不断提高。传统的学校新生入学管理模式存在诸多弊端,如人工操作效率低、数据查找困难、资......
  • JSP学校小卖部收银系统uwf3w(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
    系统程序文件列表项目功能:用户,员工,商品分类,商品信息,供应商,商品进货开题报告内容JSP学校小卖部收银系统 开题报告一、项目背景与意义1.1项目背景随着校园数字化管理的推进,学校小卖部作为学生日常消费的重要场所,其运营效率和服务质量受到了广泛关注。传统的小卖部......
  • JSP学校失物招领系统cc03q(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
    系统程序文件列表项目功能:普通用户,发布者,招领物品,申请领取,挂失信息,通知信息开题报告内容JSP学校失物招领系统 开题报告一、选题背景与意义选题背景在现代校园生活中,物品遗失和拾获的情况时有发生。传统的失物招领方式主要通过手写或打印的启事张贴在公告栏等地方......
  • JSP学校社团管理系统bp138(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
    系统程序文件列表项目功能:用户,社长,社团信息,加入社团,退出社团,社团统计,社团活动,活动报名,社团成员开题报告内容JSP学校社团管理系统  开题报告一、课题题目JSP学校社团管理系统设计与实现二、课题研究背景及意义2.1研究背景随着高校扩招和社团文化的日益丰富......
  • 图数据库在社交网络分析中的应用
    图数据库在社交网络分析中的应用非常广泛且深入,其独特的数据结构和高效的查询能力为社交网络分析提供了强大的支持。以下是图数据库在社交网络分析中的几个主要应用方面:1.用户关系建模在社交网络中,用户之间的互动构成了复杂的网络关系。图数据库能够轻松地将这些关系建模......