现在有一个表,像这样 type name
----------------------
0 红色
0 蓝色
0 绿色
1 大码
1 中码
1 小码
2 春季
2 夏季
2 秋季
2 冬季
现在我只能查表一次,将数据都取出来,显示在两个树型控件中,一个放type,另一个放name,要求点击type的值时,另一个树型控件中显示相应的name值。由于对树型控件不熟,不知道该怎么做,还望各位高手帮忙呀
----------------------
0 红色
0 蓝色
0 绿色
1 大码
1 中码
1 小码
2 春季
2 夏季
2 秋季
2 冬季
现在我只能查表一次,将数据都取出来,显示在两个树型控件中,一个放type,另一个放name,要求点击type的值时,另一个树型控件中显示相应的name值。由于对树型控件不熟,不知道该怎么做,还望各位高手帮忙呀
解决方案 »
- delphi的DFM文件,如何一文本文件形式打开?
- 如何枚举ACCESS数据库里面所有记录呢?
- 求,dbexpress 中用sqlquery 怎么取得recordcount
- ole问题
- RAVE如何將打印機報表設為橫向打印?
- 怎么利用TStoredProc中的◎RETURN_VALUE得到存储过程执行的状态信息?
- 求救!!!
- 怎么在TStringGRid 的CELL的指定单元里加入一个TComboBox
- 高分求助:在NT中添加用户和组的问题
- 我用ADO组件时,怎么现在使用ADO组件时,却发现这样的问题,出现“找不到指定的模块”?
- Delphi中COM的若幹問題!
- 如何设置form的显示位置?谢谢!
up先
TreeView1.Items.AddChild(TreeView1.Items[x], xxx);
for i:=0 to TreeView1.Items.Count-1 do
TreeView2.Items.Item[i].Selected:=TreeView1.Items.Item[i].Selected;
{ 将数据源转换成可视树 }
type
TArrayTreeNode = array of TTreeNode;
var
vFieldCount: Integer;
vStringList: TStringList; procedure pZsDataToTreeNode(mArrayTreeNode: TArrayTreeNode;
mIndex: Integer; mValueList: string);
var
vTreeNode, vTempTreeNode: TTreeNode;
vStr, S, vTemp: string;
I: Integer;
vArrayTreeNode: TArrayTreeNode;
begin
vTemp := mValueList;
vStringList.Text := mValueList;
vStr := #13#10;
vTreeNode := nil;
if mIndex < vStringList.Count then begin
if (Pred(mIndex) >= Low(mArrayTreeNode)) and (Pred(mIndex) < High(mArrayTreeNode))then
vTreeNode := mArrayTreeNode[Pred(mIndex)];
vStr := vStringList[mIndex];
end;
vArrayTreeNode := mArrayTreeNode;
with mDataSet do while not Eof do begin
S := FieldByName(FieldDefs[mIndex].Name).AsString;
if (vStr = #13#10) or (vStr <> S) or (mIndex = Pred(vFieldCount)) then
begin
vTreeNode := mTreeView.Items.AddChild(vTreeNode,
FieldByName(FieldDefs[mIndex].Name).AsString);
vStr := S;
vTempTreeNode := vTreeNode;
SetLength(vArrayTreeNode, vFieldCount);
vArrayTreeNode[mIndex] := vTempTreeNode;
for I := Succ(mIndex) to Pred(vFieldCount) do begin
vTempTreeNode := mTreeView.Items.AddChild(vTempTreeNode,
FieldByName(FieldDefs[I].Name).AsString);
vArrayTreeNode[I] := vTempTreeNode;
end;
vStringList.Clear;
for I := 0 to Pred(vFieldCount) do
vStringList.Add(FieldByName(FieldDefs[I].Name).AsString);
vTemp := vStringList.Text;
Next;
pZsDataToTreeNode(vArrayTreeNode, 0, vTemp);
vArrayTreeNode := nil;
end else begin
pZsDataToTreeNode(vArrayTreeNode, Succ(mIndex), vTemp);
end;
end;
end;begin
vStringList := TStringList.Create;
mTreeView.Items.Clear;
vFieldCount := mDataSet.FieldCount;
mDataSet.First;
pZsDataToTreeNode(nil, 0, '');
vStringList.Free;
end;
(摘自《超级猛料》)
点击第一个treeview中的1时,第二个treeview中显示 大码、中码; 点0 时,显示蓝色、绿色... 注意:因为是远端数据库,要尽量避免从数据库中传数据,只读一次数据库,将数据全读出来
谢谢各位