使用过dxDbTreeList控件的朋友请进,如何刷新dxDbTreeList中的数据,顶者有分~~~~~~

surpassable 2005-07-02 05:43:19
请教高手
首先,我将dxDbTreeList中的一个节点赋值,然后,他的孩子节点,想用父亲节点的这个值,但是是以前的那个旧值,我感觉就是dxDbTreeList没刷新

不知应该怎么解决?
...全文
396 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
quicksand201 2005-07-02
  • 打赏
  • 举报
回复
保存当前的Bookmark,刷新后再设回去
surpassable 2005-07-02
  • 打赏
  • 举报
回复
感谢大家
现在
还有个问题
在刷新树之后,怎样才能把焦点恢复到先前的状态的那个焦点?
而不是根节点
Randomize 2005-07-02
  • 打赏
  • 举报
回复
楼上的代码到是挺好,可是与楼主问题就不太相干。
quicksand201 2005-07-02
  • 打赏
  • 举报
回复
dxDBTreeList没用过,应该不是没有刷新
建议你还是将它换成高版本的cxDBTreeList吧
Randomize 2005-07-02
  • 打赏
  • 举报
回复
有没有AUTOREFESH属性?没有这个属性也应该有方法吧。找找
weixin_1374426001 2005-07-02
  • 打赏
  • 举报
回复
procedure TBase_Sele_Frm.SaveDB;
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.
weixin_1374426001 2005-07-02
  • 打赏
  • 举报
回复
给你点源码看看
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.GetBookmark;
CenterADS.DisableControls;
while not CenterADS.Eof do
begin
if CenterADS.FieldByName(RightFld).AsInteger = RightADS.fieldByName('id').asInteger then
begin
result := True;
CenterADS.GotoBookmark(bm);
break;
end;
CenterADS.Next;
end;
CenterADS.EnableControls;
CenterADS.FreeBookmark(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.GetBookmark;



RightADS.GotoBookmark(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;
begin

end;

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;
begin

end;

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;
surpassable 2005-07-02
  • 打赏
  • 举报
回复
〈〈dragon191;你好
原本我也是这么认为的,但是现在的问题,节点的值在数据库里面的值,已经更改,但是dxDbtreeList并没有实时的显示最新数据,

是不是,什么属性没有设置正确?

请指教
dragon191 2005-07-02
  • 打赏
  • 举报
回复
不应该是没有刷新吧,组件是不会骗人的!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧