自编控件:带数据感知的listview控件!

//添加的属性:

// 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.

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值