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