自己写的cnCheckTreeView操作函数(数据库分级函数)测试通过(XP+D2009)
2012-07-10 08:03
253 查看
引用:CnCheckTreeView 定义: //字符分隔符 CONST_VAL_SPLIT='■'; 取值枚举: //CnCheckTreeView组件选择结点后调用函数返回的数据类型。 type TctvResultType=(ctvResultID,ctvResultPID,ctvResultKeyField,ctvResultDisplayField,ctvResultData); //树节点数据结构 type pTreeNodeData=^TTreeNodeData; TTreeNodeData=record //节点ID sID:String; //父节点ID sPID:String; //关键字信息 sKeyField:string; //显示字信息 sDisplayField:string; //数据信息 sData:AnsiString; end; 声明: function cf_dbFillLevelCnCheckTreeView(oADOConnection:TADOConnection;oCnCheckTreeView:TCnCheckTreeView;sSql:string;sDisPlayField:string; sKeyField:string;sIDFieldName:string;sPIDFieldName:string;bFirstClear:Boolean=True):Boolean;overload; {获取无级Cn树点击节点的内容信息} function cf_ctrlGetCnCheckTreeViewNodeData(oCnCheckTreeView:TCnCheckTreeView;oResultType:TctvResultType=ctvResultData):AnsiString; 实现: //****************************************************************************** // 函数功能: 根据数据库连接/SQL查询语句及指定的显示的字段 // ID,PID分层填充树。 // 函数名称: cf_dbFillLevelCnCheckTreeView // 函数参数: oADOConnection:TADOConnection 数据库连接对象。 // oCnCheckTreeView:TCnCheckTreeView; 树形控件 // sSql:SQL查询语句 // sDisplayField:显示的字段名 // sIDFieldName: 唯一编号 // sPIDFieldName: 父编号。 // bFirstClear 是否 // 返回值: 操作是否成功 //****************************************************************************** function cf_dbFillLevelCnCheckTreeView(oADOConnection:TADOConnection;oCnCheckTreeView:TCnCheckTreeView;sSql:string;sDisPlayField:string; sKeyField:string;sIDFieldName:string;sPIDFieldName:string;bFirstClear:Boolean=True):Boolean;overload; var pNodeData:pTreeNodeData; oTreeNode,oTreeNode1,oPTreeNode,oTreeNode2:TTreeNode; oADOQuery:TADOQuery; oStringList:TStringList; iFieldCount,iIndex:Integer; begin Result:=False; if (oADOConnection=nil) or (oCnCheckTreeView=nil) or (Trim(sSql)='') or (Trim(oADOConnection.ConnectionString)='') or (Trim(sDisplayField)='') or (Trim(sIDFieldName)='') or (Trim(sPIDFieldName)='') then Exit; if bFirstClear then begin oCnCheckTreeView.Items.Clear; end; oCnCheckTreeView.BeginUpdate; oADOQuery:=TADOQuery.Create(nil); try try if oADOQuery.Active then oADOQuery.Close; oADOQuery.SQL.Clear; oADOQuery.Connection:=oADOConnection; oADOQuery.SQL.Add(sSql); oADOQuery.Open; if not oADOQuery.IsEmpty then begin oStringList:=TStringList.Create; oStringList.Clear; oADOQuery.First; oTreeNode:=nil; while not oADOQuery.Eof do begin pNodeData:=new (pTreeNodeData); pNodeData.sID:=oADOQuery.FieldByName(sIDFieldName).asString; pNodeData.sPID:=oADOQuery.FieldByName(sPIDFieldName).AsString; pNodeData.sKeyField:=oADOQuery.FieldByName(sKeyField).AsString; pNodeData.sDisplayField:=oADOQuery.FieldByName(sDisplayField).AsString; //所有数据列 for iFieldCount:=0 to oADOQuery.FieldCount-1 do begin pNodeData.sData:=pNodeData.sData + oADOQuery.Fields[iFieldCount].asString + CONST_VAL_SPLIT; end; oTreeNode:=oCnCheckTreeView.Items.AddObject(oTreeNode,pNodeData.sDisplayField,pNodeData); oStringList.AddObject(AnsiString(Trim(pNodeData.sID)),oTreeNode); oADOQuery.Next; end; //重置 oTreeNode1:=oCnCheckTreeView.Items.GetFirstNode; while (oTreeNode1<>nil) do begin //当前节点父ID与查找的节点ID相同。 iIndex:=oStringList.IndexOf(AnsiString(Trim(pTreeNodeData(oTreeNode1.Data).sPID))); if iIndex<>-1 then begin //保存点 oTreeNode2:=oTreeNode1; //父节点。 oPTreeNode:=TTreeNode(oStringList.Objects[iIndex]); //循环下一个节点。 oTreeNode1:=oTreeNode1.getNextSibling; //移动 oTreeNode2.MoveTo(oPTreeNode,naAddChild); end else begin //循环下一个节点。 oTreeNode1:=oTreeNode1.getNextSibling; Continue; end; iIndex:=-1; end; end; Result:=True; except Result:=False; end; finally oADOQuery.Free; oCnCheckTreeView.EndUpdate; end; end; //****************************************************************************** // 函数功能: 获取无级树选择节点的数据信息 // 函数名称: cf_ctrlGetCnCheckTreeViewNodeData // 函数参数: oCnCheckTreeView:TCnCheckTreeView 树控件 // oResultType:TctvResultType 返回操作信息的类型 /默认是所有数据。 // 返回值: 返回操作的信息 //****************************************************************************** function cf_ctrlGetCnCheckTreeViewNodeData(oCnCheckTreeView:TCnCheckTreeView;oResultType:TctvResultType=ctvResultData):AnsiString; begin Result:=''; if (oCnCheckTreeView=nil) or (oCnCheckTreeView.Selected=nil) then Exit; try if oCnCheckTreeView.Selected<>nil then begin case oResultType of ctvResultID:begin Result:=pTreeNodeData(oCnCheckTreeView.Selected.Data).sID; end; ctvResultPID:begin Result:=pTreeNodeData(oCnCheckTreeView.Selected.Data).sPID; end; ctvResultKeyField:begin Result:=pTreeNodeData(oCnCheckTreeView.Selected.Data).sKeyField; end; ctvResultDisplayField:begin Result:=pTreeNodeData(oCnCheckTreeView.Selected.Data).sDisplayField; end; ctvResultData:begin Result:=pTreeNodeData(oCnCheckTreeView.Selected.Data).sData; end; end; end; except Result:=''; end; end;
相关文章推荐
- php+odbc+access 数据库操作函数,在windows下测试通过
- 自己写的一个测试函数执行效率的单元(test on Delphi 7)
- MVC操作LocalDB数据库,通过电影类型和名称来查询电影,在控制器里写的方法以及页面代码,自己参考。
- 通过Maven配置测试环境和开发环境连接不同的数据库
- kettle中使用javascript步骤和fireToDB函数实现自己定义数据库查询
- 在别人的机器上使用IP通过SQL Server Authentication来访问自己的数据库
- rails中migration数据库后测试不通过的问题
- JMter通过JDBC请求进行数据库压力测试
- 数据库修复Part1:创建自己的测试corrupt数据库
- 测试数据库连接的函数
- 自己常用到的Ajax方法(已测试通过)
- 数据库基本操作小摘(代码由mysql-essential-5.1.50-win32测试通过)
- 通过Maven配置测试环境和开发环境连接不同的数据库
- rails中migration数据库后测试不通过的问题
- 剑指Offer算法题JAVA版4-12题(全是个人写的非官方,只供参考和自己复习,测试用例都通过了)
- 数据库修复Part1:创建自己的测试corrupt数据库
- winmail搭建自己的邮件服务器-第一篇(附详细图解测试通过可用)
- IIS 的Server Application Error 解决方法, 我并没有测试通过。 这里只供自己查阅。
- 自己常用到的自定义公共类(已测试通过)
- 自己常用到的自定义公共类(已测试通过)