الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة في كيفية تعبة شجرة من جدول

بدأه rampal في 26 مايو 2010 · 2 رد · 818 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الكرام أرجو المساعدة في طريقة تعبئة شجرة من جدول حيث أن حيث أنني بحثت في أغلب المواقع المساعة و لم أجد ضالتي

الجدول عبارة عن ثلاث حقول

حقل مسلسل

حقل الاسم

حقل الأب

حاولت عمل شجرة تعمل تعبئة لجميع الابناء و ذلك بفحص كود الاب و تعبئة في الشجرة و لكن الشجرة تبقي تعمل تعبئة لحت يقف و ما تعمل تعبئة لباقي الجدول

المثال في المرفقات

tv.rar

#2
// ================= Tree Functions=======================

Procedure GetNodeChilds(inTree: TExTreeView; inNode: TExTreeNode;
  inConnection: TADOConnection; NodeName: String);
var
  TempNode: TExTreeNode;
  xQuery: TADOQuery;
  m_Folder, m_Father: String;
begin

  xQuery := TADOQuery.Create(nil);
  xQuery.Connection := inConnection;
  xQuery.SQL.Text := 'select * from Folders Where Father = ' + QuotedStr (NodeName);

  try
    xQuery.Open;

    while not xQuery.Eof do
    begin
      m_Folder := xQuery.FieldByName('Folder').AsString; // Folder Name
      m_Father := xQuery.FieldByName('Father').AsString; //Folder Father

      TempNode := BuildTreeNode(inTree, m_Folder, m_Father, inNode);
      GetNodeChilds(inTree, TempNode, inConnection, m_Folder);
      TempNode.Expanded := True;
      xQuery.Next;
    end;

  finally
    FreeAndNil(xQuery);

  end;

end;

function BuildTreeNode(inTree: TExTreeView; inNodeText, NodeFather: String;
  FatherNode: TExTreeNode): TExTreeNode;
var
  TempNode: TExTreeNode;
begin

  if FatherNode <> nil then
  begin
    TempNode := inTree.Items.AddChild(FatherNode, inNodeText);
    TempNode.ID := NodeFather;
  end
  else
  begin
    TempNode := TExTreeNode.Create(inTree.Items);
    TempNode := inTree.Items.Add(TempNode, inNodeText);
    TempNode.ID := NodeFather;

  end;
  TempNode.ImageIndex := 0;
  TempNode.SelectedIndex := 0;

  TempNode.Expanded := True;
  Result := TempNode;

end;

function FindNode(inTree: TExTreeView; NodeText, NodeFather: String;
  ByFather: Boolean = True): TExTreeNode;
var
  xNode: integer;
  FindStr: string;
begin
  Result := nil;
  if ByFather then
    FindStr := NodeFather
  else
    FindStr := NodeText;

  for xNode := 0 to inTree.Items.Count - 1 do
  begin
    if inTree.Items[xNode].ID = FindStr then
    begin
      Result := inTree.Items[xNode];
      exit;
    end;

  end;

end;

procedure BuildFoldersTree(inTree: TExTreeView; inConnection: TADOConnection);
var
  TempNode: TExTreeNode;
  xQuery: TADOQuery;
  m_Folder, m_Father: String;
begin

  xQuery := TADOQuery.Create(nil);
  xQuery.Connection := inConnection;
  xQuery.SQL.Text := 'select * from Folders where Father = ' + QuotedStr('*');

  try
    xQuery.Open;

    while not xQuery.Eof do
    begin
      m_Folder := xQuery.FieldByName('Folder').AsString;
      m_Father := xQuery.FieldByName('Father').AsString;

      TempNode := BuildTreeNode(inTree, m_Folder, m_Father, nil);
      GetNodeChilds(inTree, TempNode, inConnection, m_Folder);
      TempNode.Expanded := True;
      // else
      // BuildTreeNode(inTree,m_Folder,m_Father,FindNode(intree,m_Folder,m_Father,true));

      xQuery.Next;
    end;

  finally
    FreeAndNil(xQuery);

  end;

end;

الاستخدام فقط باستدعاء الدالة

procedure BuildFoldersTree(FoldersTree,sysConnection);

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

إن تخطئ فأنت إنسان ... أما أن تلوم جهازك الكمبيوتر على خطأك فهذا أكثر إنسانية.

#3

أخي الكريم أرجو لو ترفق مثال أ تقوم بالتعديل على الثال المرفق

مواضيع مشابهة