Programms

Delphi
components

ActiveX

Pascal
(source)

C/C++/C#
(source)

JavaScript

ASP

SQL

Tree (ADO)
ComboBox (ADO)
SuperThread
 Debugging Delphi programm 331 KB (Marco Cantù's Delphi Power Book)
 297 KB (Marco Cantù's Delphi Power Book)
 

ASC table (0-127) - programmer's wallpaper
Рейтинг@Mail.ru Фотограф Фотограф Рабусов С.В. ссср
<%'''' %>

Компонент TreeAdo

CLASS TTreeViewADO

Предназначен для визуализации таблицы базы данных, реализующей "дерево".
    В минимальной реализации таблица должна содержать три поля:
  1. ID - Идентификатор записи
  2. PID - Идентификатор родительский записи (ссылается на поле ID)
  3. NAMED - Наименование записи
    Для того, чтобы компонент мог работать с любой таблицей, имеющей минимально необходимый набор полей, класс TTreeViewADO снабжен соответствующими свойствами для хранения имен таблицы и полей:
  • TreeTableName - имя таблицы (по умолчанию [Категории товаров])
  • sqlName - имя поля наименования узла "дерева" (по умолчанию NAMED)
  • sqlID - имя поля идентификатора записи (по умолчанию ID)
  • sqlParentID - имя поля идентификатора родительской записи (по умолчанию PID)
    Инициализация компонента
  1. Передать компоненту строку соединени
    adoTreeView.SetConnectionString(ConnectionString);
  2. Установить свойства ( если они отличаются от принятых по умолчанию)
    adoTreeView.TreeTableName = '[имя таблицы]';
    adoTreeView.sqlName = '[наименование]';
    adoTreeView.sqlID = '[имя поля идентификатора]';
    adoTreeView.sqlParentID = '[имя поля идентификатора отца]';
  3. Вызвать метод для заполнения "дерева"
    adoTreeView.Fill;

Объявление класса
const
  C_MT_CLOSED_ICON = 0;
  C_MT_OPEN_ICON   = 1;


type
  TMTreeAction = (mtaOpen, mtaClose);
  TMTreeEvent = (mteExpanded, mteCollapsed, mteGetSelectedIndex, mteMouseDown);
  TCursorActionHandler=procedure(Node: TTreeNode; Action: TMTreeAction; Event: TMTreeEvent) of object;
  TOnNeedChildrenEvent=procedure(Node: TTreeNode; Data: TObject) of object;
  TMouseEvent = procedure (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object;

type TTreeViewADO = class(TTreeView)
  private
    { Private declarations }
    RS : TADODataSet;
    AC : TADOCommand;

    FOldText: string;
    FIAH: TCursorActionHandler;
    FNeedChildrenEvent: TOnNeedChildrenEvent;

    FDoSelectionOnMouseDown: boolean;
    FDoIconChanging:   boolean;
    FDoAutoDeletion:   boolean;
    FReadEveryTime :   boolean;

    FTreeTableName : string; // имя табл. для построения дерева
    FsqlName, FsqlID, FsqlParentID : string; // имена полей с наименовниями, ид. и родительским ид
    FOrderByString : string; // строка для построения сортировки
    FOrderByStringNode : string;
    FGroupByString : string; // строка для построения группировки
    FGroupByStringNode : string;
    function  DeleteNodeFromDataBase(ID : integer) : boolean;
    procedure DeleteNodeFromTree(ID : integer);
    function  SaveNode2DataBase(PID,ID : integer; N : string) : integer;
    procedure AddNode2Tree(PID, ID, NewId : integer; N : string; Nm : integer = 1); virtual;
    function  UpdateInDateBase(PID,ID : integer; N : string) : boolean;
    procedure UpdateNodeInTree(ID : integer; N : string);
  protected
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure DeletionHandler(Sender: TObject; Node: TTreeNode);

    function  CanEdit(Node: TTreeNode): Boolean; override;
    procedure Edit(const Item: TTVItem); override;
    procedure Expand(Node: TTreeNode); override;
    function  CanExpand(Node: TTreeNode): Boolean; override;
    procedure Collapse(Node: TTreeNode); override;

  public
    { Public declarations }
    CurSelected : TTreeNode;
    procedure Fill; overload; virtual;
    procedure Fill(clearbefore : boolean; ws : WideString; Node : TTreeNode); overload; virtual;
    procedure Fill(Node : TTreeNode); overload; virtual;
    procedure SetConnectionString(s : WideString);
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    //
    procedure OpenIcon(Node: TTreeNode; Event: TMTreeEvent); virtual;
    procedure ClosedIcon(Node: TTreeNode; Event: TMTreeEvent); virtual;
    procedure FillTree(Node: TTreeNode); virtual;
    procedure DeleteChildren(Node: TTreeNode); virtual;
    procedure NeedChildren(Node: TTreeNode);
    function  GetNodeByID(ID : integer) : TTreeNode; virtual;
    procedure DeleteNode(ID : integer);
    procedure SaveNode(PID,ID : integer; N : string);
    procedure UpdateNode(PID,ID : integer; N : string);
  published
    property IconActionHandler: TCursorActionHandler read FIAH write FIAH;
    property OnChildrenNeeded: TOnNeedChildrenEvent read FNeedChildrenEvent write FNeedChildrenEvent;
    property DoSelectionOnMouseDown: boolean read FDoSelectionOnMouseDown write FDoSelectionOnMouseDown;
    property DoIconChanging: boolean read FDoIconChanging write FDoIconChanging;
    property DoAutoDeletion: boolean read FDoAutoDeletion write FDoAutoDeletion;
    property ReadEveryTime : boolean read FReadEveryTime  write FReadEveryTime;

    property TreeTableName : string read FTreeTableName write FTreeTableName;
    property sqlName : string read FsqlName write FsqlName;
    property sqlID : string read FsqlID write FsqlID;
    property sqlParentID : string read FsqlParentID write FsqlParentID;

    property OrderByString : string read FOrderByString write FOrderByString;
    property GroupByString : string read FGroupByString write FGroupByString;
    property OrderByStringNode : string read FOrderByStringNode write FOrderByStringNode;
    property GroupByStringNode : string read FGroupByStringNode write FGroupByStringNode;
  end;
Исходный код