//添加的属性:
// property DIRDatasource:TDataSource read GetDIRdatasource write SetDIRdatasource; //文件夹数据源
// property DIRNAMEDataField: string read GetDIRNAMEFieldName write SetDIRNAMEFieldName; //文件夹名字字段
// property FILEDatasource:TDataSource read GetFILEdatasource write SetFILEdatasource;//文件数据源
//
// property FILENAMEDataField: string read GetFILENAMEFieldName write SetFILENAMEFieldName;//文件名字字段
//
// property reloadDIR:Boolean read getDIRloadstate write SetDIRloadstate; //是否允许重新加载文件夹
// property reloadFILE:Boolean read getFILEloadstate write SetFILEloadstate;//是否允许重新加载文件
///控件:
unit ListView1;
interface
uses
Windows,Messages,Dialogs,SysUtils, Classes, Controls, ComCtrls,DB,DBCtrls;
type
TdbListView = class(TListView)
private
FDataLinkDIR,FDatalinkFILE:TFieldDataLink;
// function Getdatasource: TDataSource;
// procedure Setdatasource(const Value: TDataSource);
procedure DataChange(Sender: TObject);
// function GetFieldName: string;
// procedure SetFieldName(const Value: string);
procedure writeColumns;
procedure writediritems;
procedure writefileitems;
function GetDIRdatasource: TDataSource;
function GetDIRNAMEFieldName: string;
function GetFILEdatasource: TDataSource;
function GetFILENAMEFieldName: string;
procedure SetDIRdatasource(const Value: TDataSource);
procedure SetDIRNAMEFieldName(const Value: string);
procedure SetFILEdatasource(const Value: TDataSource);
procedure SetFILENAMEFieldName(const Value: string);
function getDIRloadstate: Boolean;
function getFILEloadstate: Boolean;
procedure SetDIRloadstate(const Value: Boolean);
procedure SetFILEloadstate(const Value: Boolean);
{ Private declarations }
protected
procedure Notification(AComponent: TComponent;Operation: TOperation);override;
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
{ Public declarations }
published
{ Published declarations }
property DIRDatasource:TDataSource read GetDIRdatasource write SetDIRdatasource;
property DIRNAMEDataField: string read GetDIRNAMEFieldName write SetDIRNAMEFieldName;
property FILEDatasource:TDataSource read GetFILEdatasource write SetFILEdatasource;
property FILENAMEDataField: string read GetFILENAMEFieldName write SetFILENAMEFieldName;
property reloadDIR:Boolean read getDIRloadstate write SetDIRloadstate;
property reloadFILE:Boolean read getFILEloadstate write SetFILEloadstate;
end;
var
dblistview_i1,dblistview_i2:integer;
dblistview_canload_DIR:Boolean;
dblistview_canload_FILE:Boolean;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TdbListView]);
end;
{ TListView1 }
constructor TdbListView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDataLinkDIR := TFieldDataLink.Create;
FDatalinkFILE:= TFieldDataLink.Create;
FDataLinkDIR.OnDataChange := DataChange;
FDatalinkFILE.OnDataChange := DataChange;
dblistview_canload_DIR :=false;
dblistview_canload_FILE :=false;
//dblistview_i1 :=0;
end;
procedure TdbListView.DataChange(Sender: TObject);
begin
if (FDataLinkDIR.Field <> nil)or(FDatalinkFILE.Field<>nil ) then
begin
//ShowMessage(FDataLink.DataSet.Name+#13+ FDataLink.FieldName+#13+ FDataLink.DataSource.Name
//+ FDataLink.DataSource.DataSet.Name);
if Columns.Count =0 then writeColumns;
//if Items.Count =0 then dblistview_i1:=0;
if (dblistview_canload_DIR =True) then
begin
//writeColumns;
writediritems;
end;
if (dblistview_canload_FILE =True) then
begin
//writeColumns;
writefileitems;
end;
//Text := FDataLink.Field.Text;
end;
end;
function TdbListView.GetDIRdatasource: TDataSource;
begin
Result := FDataLinkDIR.DataSource;
end;
function TdbListView.getDIRloadstate: Boolean;
begin
Result :=dblistview_canload_DIR;
end;
function TdbListView.GetDIRNAMEFieldName: string;
begin
Result := FDataLinkDIR.FieldName;
end;
function TdbListView.GetFILEdatasource: TDataSource;
begin
Result := FDataLinkFILE.DataSource;
end;
function TdbListView.getFILEloadstate: Boolean;
begin
Result :=dblistview_canload_FILE;
end;
function TdbListView.GetFILENAMEFieldName: string;
begin
Result := FDataLinkFILE.FieldName;
end;
procedure TdbListView.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (((FDataLinkDIR <> nil) and
(AComponent = DIRDataSource)) or ((FDataLinkFILE <> nil) and
(AComponent = FILEDataSource)))
then
begin
DIRDataSource := nil;
FILEDataSource := nil;
end;
dblistview_canload_DIR :=false;
dblistview_canload_FILE :=false;
// dblistview_i1:=0;
end;
procedure TdbListView.SetDIRdatasource(const Value: TDataSource);
begin
if not (FDataLinkDIR.DataSourceFixed and (csLoading in ComponentState)) then
begin
FDataLinkDIR.DataSource := Value;
//FDataLink.DataSourceFixed :=true;
end;
if Value <> nil then
begin
Value.FreeNotification(Self);
end;
end;
procedure TdbListView.SetDIRloadstate(const Value: Boolean);
begin
dblistview_canload_DIR:=Value;
end;
procedure TdbListView.SetDIRNAMEFieldName(const Value: string);
begin
FDataLinkDIR.FieldName := Value;
end;
procedure TdbListView.SetFILEdatasource(const Value: TDataSource);
begin
if not (FDataLinkFILE.DataSourceFixed and (csLoading in ComponentState)) then
begin
FDataLinkFILE.DataSource := Value;
//FDataLink.DataSourceFixed :=true;
end;
if Value <> nil then
begin
Value.FreeNotification(Self);
end;
end;
procedure TdbListView.SetFILEloadstate(const Value: Boolean);
begin
dblistview_canload_FILE:=Value;
end;
procedure TdbListView.SetFILENAMEFieldName(const Value: string);
begin
FDataLinkFILE.FieldName := Value;
end;
procedure TdbListView.writeColumns;
begin
//Items.Clear;
while Columns.Count <>0 do
begin
Columns.Delete(Columns.Count-1);
end;
Columns.Add;
Columns.Items[0].Caption :='名称';
Columns.Add;
Columns.Items[1].Caption :='id';
Columns.Add;
Columns.Items[2].Caption :='创建时间';
Columns.Add;
Columns.Items[3].Caption :='类型';
Columns.Add;
Columns.Items[4].Caption :='扩展名';
Columns.Add;
Columns.Items[5].Caption :='大小';
Columns.Add;
Columns.Items[6].Caption :='最后一次修改者';
// Columns.Add;
// Columns.Items[6].Caption :='所有者';
// Columns.Add;
// Columns.Items[7].Caption :='名称';
// Columns.Add;
// Columns.Items[8].Caption :='名称';
// Columns.Add;
// Columns.Items[9].Caption :='名称';
//ShowMessage(IntToStr(Datasource.DataSet.Fields.Count));
//Datasource.DataSet.Edit;
// dblistview_i1 :=0;
// dblistview_i2:=1;
// Columns.Add;
// Columns.Items[0].Caption := DIRNAMEDataField;
// repeat
// //ShowMessage(FDataLink.DataSet.Fields.Fields[dblistview_i1].FieldName+';;;'+DataField);
// //ShowMessage(IntToStr(dblistview_i1));
// if FDataLink.DataSet.Fields.Fields[dblistview_i1].FieldName <>DIRNAMEDataField then
// begin
// Columns.Add;
// Columns.Items[dblistview_i2].Caption :=FDataLink.DataSet.Fields.Fields[dblistview_i1].FieldName;
// dblistview_i1 :=dblistview_i1 +1;
// dblistview_i2:=dblistview_i2 +1;
// end
// else
// dblistview_i1 :=dblistview_i1 +1;
//
// until Columns.Count =FDataLink.DataSet.Fields.Count ;
/
end;
procedure TdbListView.writediritems;
var
temp_item:TListItem;
begin
dblistview_canload_DIR :=False;
// if (FDataLinkDIR.Field <>nil)and(FDatalinkDIR.DataSet.RecordCount>0) then
// begin
// dblistview_i1 :=0;
//dblistview_i2 :=0;
//Datasource.DataSet.First;
FDataLinkDIR.DataSet.Open;
for dblistview_i1 := 0 to FDatalinkDIR.DataSet.RecordCount-1 do
begin
FDataLinkDIR.DataSet.RecNo :=dblistview_i1+1;
//ShowMessage(Datasource.DataSet.FieldByName(Columns.Items[0].Caption).AsString);
temp_item :=Items.Add;
temp_item.Caption:=FDataLinkDIR.DataSet.FieldByName(DIRNAMEDataField).AsString;
temp_item.SubItems.Add(FDataLinkdir.DataSet.FieldByName('DIR_ID').AsString);
temp_item.SubItems.Add(FDataLinkdir.DataSet.FieldByName('DIR_CREATEDATETIME').AsString);
temp_item.SubItems.Add(FDataLinkdir.DataSet.FieldByName('DIR_TYPE').AsString);
// Items.Item[dblistview_i1 +dblistview_i2].SubItems.Add(FDataLinkdir.DataSet.FieldByName('DIR_ID').AsString);
// Items.Item[dblistview_i1 +dblistview_i2].SubItems.Add(FDataLinkdir.DataSet.FieldByName('DIR_CREATEDATETIME').AsString);
// Items.Item[dblistview_i1 +dblistview_i2].SubItems.Add(FDataLinkdir.DataSet.FieldByName('DIR_TYPE').AsString);
// Items.Item[dblistview_i2].SubItems.Add('');
//====Items.Item[dblistview_i2].SubItems.Add(FDataLink.DataSet.FieldByName(Columns.Items[dblistview_i1].Caption).AsString);
//ShowMessage(Datasource.DataSet.FieldByName(Columns.Items[dblistview_i1].Caption).AsString);
//ShowMessage(IntToStr(Datasource.DataSet.RecNo-1));
end;
// Self.Update;
//dblistview_i1 := Items.Count;
//end;
end;
procedure TdbListView.writefileitems;
var
temp_item2:TListItem;
begin
//dblistview_i2 :=0;
//Datasource.DataSet.First;
dblistview_canload_FILE :=False;
// if (FDatalinkFILE.Field <>nil)and(FDatalinkFILE.DataSet.RecordCount>0) then
// begin
FDatalinkFILE.DataSet.Open;
for dblistview_i2 := 0 to FDatalinkFILE.DataSet.RecordCount-1 do
begin
FDataLinkFILE.DataSet.RecNo :=dblistview_i2+1;
//ShowMessage(Datasource.DataSet.FieldByName(Columns.Items[0].Caption).AsString);
temp_item2 :=Items.Add;
temp_item2.Caption:=FDataLinkFILE.DataSet.FieldByName(FILENAMEDataField).AsString;
temp_item2.SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_ID').AsString);
temp_item2.SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_DATE').AsString);
temp_item2.SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_FILESTYLE').AsString);
temp_item2.SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_KZHNAME').AsString);
temp_item2.SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_SIZE').AsString);
temp_item2.SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_LJ_NAME').AsString);
// Items.Item[dblistview_i1 +dblistview_i2].SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_ID').AsString);
// Items.Item[dblistview_i1 +dblistview_i2].SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_DATE').AsString);
// Items.Item[dblistview_i1 +dblistview_i2].SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_FILESTYLE').AsString);
// Items.Item[dblistview_i1 +dblistview_i2].SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_SIZE').AsString);
// Items.Item[dblistview_i1 +dblistview_i2].SubItems.Add(FDataLinkFILE.DataSet.FieldByName('JA_LJ_NAME').AsString);
// Items.Item[dblistview_i2].SubItems.Add('');
//====Items.Item[dblistview_i2].SubItems.Add(FDataLink.DataSet.FieldByName(Columns.Items[dblistview_i1].Caption).AsString);
//ShowMessage(Datasource.DataSet.FieldByName(Columns.Items[dblistview_i1].Caption).AsString);
//ShowMessage(IntToStr(Datasource.DataSet.RecNo-1));
end;
//dblistview_i1 := Items.Count;
//end;
//Self.Update;
end;
//procedure TdbListView.writeitems;
//begin
///
dblistview_i1 :=0;
dblistview_i2 :=0;
//Datasource.DataSet.First;
dblistview_canload :=False;
for dblistview_i2 := 0 to DIRDatasource.DataSet.RecordCount-1 do
begin
FDataLink.DataSet.RecNo :=dblistview_i2+1;
//ShowMessage(Datasource.DataSet.FieldByName(Columns.Items[0].Caption).AsString);
Items.Add.Caption:=FDataLink.DataSet.FieldByName(Columns.Items[0].Caption).AsString;
for dblistview_i1 := 1 to Columns.Count -1 do
begin
Items.Item[dblistview_i2].SubItems.Add(FDataLink.DataSet.FieldByName(Columns.Items[dblistview_i1].Caption).AsString);
//ShowMessage(Datasource.DataSet.FieldByName(Columns.Items[dblistview_i1].Caption).AsString);
end;
//ShowMessage(IntToStr(Datasource.DataSet.RecNo-1));
end;
//
// //写入文件夹项目====================================================================================================================
//
//
//
//
//
//
//
//
//
//
//
// //==================================================================================================================================
//
// if (FDataLinkfile.Field <>nil)and(FDatalinkFILE.DataSet.RecordCount>0) then
// begin
//
// //写入文件项目=======================================================================================================================
//
//
//
// end;
//
//
// //==================================================================================================================================
//
//end;
destructor TdbListView.Destroy;
begin
inherited;
FDataLinkDIR.Free;
FDatalinkFILE.Free;
FDataLinkDIR := nil;
FDataLinkFILE := nil;
dblistview_canload_DIR :=false;
dblistview_canload_FILE :=false;
dblistview_i1:=0;
end;
end.