请教高手
首先,我将dxDbTreeList中的一个节点赋值,然后,他的孩子节点,想用父亲节点的这个值,但是是以前的那个旧值,我感觉就是dxDbTreeList没刷新不知应该怎么解决?
首先,我将dxDbTreeList中的一个节点赋值,然后,他的孩子节点,想用父亲节点的这个值,但是是以前的那个旧值,我感觉就是dxDbTreeList没刷新不知应该怎么解决?
解决方案 »
- 问个Delphi+SQLSERVER的问题
- dblookupcombobox使用?在线等待!
- 如何使DBGrid内的数据按某一个字段排序?
- 请大家推荐基本关于delphi7.0(6.0也可)的好书(经典书;最好是delphi中关于uml那一部分写的好的书)。高分赠送,来者有分。
- 新生成EXCEL的SHEET放到相应的位置
- 程序启动问题!来者有分呀!
- 偶不知道為何總是出現錯誤'I/O error 32',是什麽原因?
- 谁知道如何将string类型的数据转化成widestring类型的
- socket高手进来...socket编程中有几种传输文件的方式?
- 怎样得到查找结果?
- dxdbgrid排序出错的问题
- ◆◆◆问个编写自定义组件的白痴问题?你一定会的!
原本我也是这么认为的,但是现在的问题,节点的值在数据库里面的值,已经更改,但是dxDbtreeList并没有实时的显示最新数据,是不是,什么属性没有设置正确?请指教
uses SysPublic, DM_Unit;{$R *.dfm}{ TBase_Sele_Frm }procedure TBase_Sele_Frm.AddSelNode(node : TDXTreeListNode);
var
bm : TBookMark;
procedure AddToCenterTV;
begin
CenterADS.Append;
CenterADS.FieldByName(LeftFld).AsInteger := LeftADS.FieldByName('id').asInteger;
CenterADS.FieldByName(RightFld).AsInteger := RightADS.FieldByName('id').asInteger;
CenterADS.fieldbyName('ID').AsInteger := getTabID(CenterTab);
CenterADS.FieldByName('RName').AsString := RightADS.fieldbyName('name').asString;
CenterADS.Post;
end;
function LoateFilter(iID : integer ) : boolean;
var
bm : TBookMark;
begin
result := False;
CenterADS.First;
bm := CenterADS.GetBook;
CenterADS.DisableControls;
while not CenterADS.Eof do
begin
if CenterADS.FieldByName(RightFld).AsInteger = RightADS.fieldByName('id').asInteger then
begin
result := True;
CenterADS.GotoBook(bm);
break;
end;
CenterADS.Next;
end;
CenterADS.EnableControls;
CenterADS.FreeBook(bm); end;
begin
if LeftTV.FocusedNode.HasChildren then
begin
ShowMsg('请选中左边树的子节点!');
exit;
end; if node <> nil then
begin
if not node.HasChildren then
begin
if CenterADS.IsEmpty then
AddToCenterTV
else
begin
if not LoateFilter(RightADS.fieldByName('id').asInteger) then
//if not CenterADS.Locate((leftFld+';'+RightFld), vararrayof([LeftADS.FieldByName('id').AsInteger,RightADS.FieldByName('id').AsInteger]),[loCaseInsensitive]) then
//if not CenterADS.Locate(LeftFld,RightADS.FieldByName('id').asInteger,[loCaseInsensitive]) then
// if not CenterADS.Locate(LeftFld,RightADS.FieldByName('id').asInteger,[loCaseInsensitive]) then
AddToCenterTV
else
ShowMsg('已选择此节点!');
end;
end
else
begin
ShowMsg('请选择右边树的明细节点!');
{RightADS.DisableControls;
bm := RightADS.GetBook; RightADS.GotoBook(bm);
RightADS.EnableControls;}
end;
end;end;procedure TBase_Sele_Frm.ListData(SQLLeft1, SQLCenter1, SQLRight1 ,LeftFld1,RightFld1,CenterTab1: string);
begin
SQLLeft := SQLLeft1;
SQLCenter := SQLCenter1;
SQLRight := SQLRight1;
LeftFld := LeftFld1;
RightFld := RightFld1;
CenterTab := CenterTab1;
OpenData;
LoadGrid;
end;procedure TBase_Sele_Frm.OpenData;
begin
OpenDataSet(LeftADS ,SQLLeft);
OpenDataSet(RightADS ,SQLRight);
OpenDataSet(CenterADS ,SQLCenter);
end;procedure TBase_Sele_Frm.RemoveSelNode;
beginend;procedure TBase_Sele_Frm.bsSkinButton4Click(Sender: TObject);begin
inherited;
if CenterADS.IsEmpty then exit;
if ShowAskMsg('确认删除此项记录吗?') = idOK then
CenterADS.Delete;end;procedure TBase_Sele_Frm.leftADSAfterScroll(DataSet: TDataSet);
begin
inherited;
{ if CenterADS.State <> dsBrowse then
begin
if ShowASKMsg('数据已经修改,是否保存?') = idOk then
SaveCenterDB;
end;} if CenterADS.Filtered then
CenterADS.Filtered := False;
CenterADS.Filter := LeftFld + ' = '+ LeftADS.fieldbyName('id').asString;
CenterADS.Filtered := True;end;procedure TBase_Sele_Frm.SaveCenterDB;
beginend;procedure TBase_Sele_Frm.loadGrid;
begin
//读取左边的树
StrToTreeField(LeftTV,'name','名称','100'); LeftTv.KeyField := 'ID'; if LeftADS.FieldByName('parent') <> nil then
LeftTV.ParentField := 'parent'; //读取右边的树
StrToTreeField(RightTV,'name','名称','100'); RightTv.KeyField := 'ID';
if RightADS.FieldByName('parent') <> nil then
RightTV.ParentField := 'parent';
ChangeColWidth;
end;procedure TBase_Sele_Frm.ListCenterGrid(fld, fldCaption,fldWidth: string);
begin
StrToTreeField(CenterTV,fld,fldCaption,'100');
CenterTV.KeyField := 'ID';
CenterTV.ParentField := 'ID';
CenterADS.Recordset.Properties.Item['Unique Table'].Value := CenterTab;
ChangeColWidth;
end;procedure TBase_Sele_Frm.bsSkinButton3Click(Sender: TObject);
begin
inherited;
AddSelNode(RightTV.FocusedNode);
end;procedure TBase_Sele_Frm.bsSkinButton2Click(Sender: TObject);
begin
inherited;
close;
end;
var
i : integer;
iFldCount : integer;
tmpADS : TAdoDataSet;
sFldName : string;
begin
CenterADS.First;
iFldCount := GetCommaStrCount(SaveFld);
tmpADS := TAdoDataSet.Create(nil);
OpenDataSet(tmpADS, 'select * from ' + CenterTab);
//如果有这个编号,则修改,否则新增
while not CenterADS.Eof do
begin
if tmpADS.Locate('id', CenterADS.FieldByName('id').asInteger,[]) then
tmpADS.Edit
else
tmpADS.Append;
for i := 1 to iFldCount do
begin
sFldName := GetCommaStr(SaveFld,i);
tmpADS.FieldByName(sFldName).Value := CenterADS.FieldByName(sFldName).Value;
end;
tmpADS.Post;
CenterADS.Next;
end;
end;procedure TBase_Sele_Frm.SetSaveFld(SaveFld1: string);
begin
SaveFld := SaveFld1;
end;procedure TBase_Sele_Frm.bsSkinButton1Click(Sender: TObject);
begin
inherited;
SaveDB;
end;procedure TBase_Sele_Frm.ChangeColWidth;
var
i, iWid : integer;
begin
LeftTV.ColumnByFieldName('name').Width := LeftTV.Width - 5;
RightTV.ColumnByFieldName('name').Width := RightTV.Width - 5; iWid := 0;
if CenterTV.ColumnCount < 1 then exit;
for i := 0 to CenterTV.ColumnCount - 1 do
begin
iWid := iWid + CenterTV.Columns[i].Width;
end; //if iWid < CenterTV.Width - 5 then
CenterTV.columns[CenterTV.ColumnCount - 1].Width := CenterTV.columns[CenterTV.ColumnCount - 1].Width + (CenterTV.Width - 5 - iWid)
//else
end;procedure TBase_Sele_Frm.Splitter1Moved(Sender: TObject);
begin
inherited;
ChangeColWidth;
end;procedure TBase_Sele_Frm.Splitter2Moved(Sender: TObject);
begin
inherited;
ChangeColWidth;
end;procedure TBase_Sele_Frm.FormResize(Sender: TObject);
begin
inherited;
ChangeColWidth;
end;procedure TBase_Sele_Frm.LeftTVGetImageIndex(Sender: TObject;
Node: TdxTreeListNode; var Index: Integer);
const
ImagesIndex: array[Boolean] of Integer = (16, 17);
begin
inherited;
if Node.HasChildren then
Index := ImagesIndex[Node.Expanded]
else
Index := 16;
end;procedure TBase_Sele_Frm.LeftTVGetSelectedIndex(Sender: TObject;
Node: TdxTreeListNode; var Index: Integer);
const
ImagesIndex: array[Boolean] of Integer = (16, 17);
begin
inherited;
if Node.HasChildren then
Index := ImagesIndex[Node.Expanded]
else
Index := 16;
end;procedure TBase_Sele_Frm.CenterTVDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
inherited;
// exit;
if Source.ClassType = TdxDBTreeList then
begin
if not TdxDBTreeList(Source).DragNode.HasChildren then
begin
AddSelNode(RightTV.DragNode);
Accept := True;
end;
end;
end;procedure TBase_Sele_Frm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
leftADS.Active := False;
RightADS.Active := False;
CenterADS.Active := False;
end;end.
建议你还是将它换成高版本的cxDBTreeList吧