آخرين پست هاي ارسالي انجمن ايران دلفي

تماشای رایگان فیلم ایرانی ، خارجی و کودک آکادمی دلفی
نمایش نتایج: از 1 به 3 از 3

موضوع: طراحی گروه بصورت parent and child

  1. #1
    کاربر سایت beny آواتار ها
    تاریخ عضویت
    November 2013
    سن
    10
    نوشته ها
    41
    تشکر ها
    44
    تشکر شده 5 بار در 5 ارسال.

    طراحی گروه بصورت parent and child

    با سلام و احترام

    میخواستم تو برنامه اطلاعات رو بصورت پدر فرزندی طبقه بندی کنم اما تعداد طبقه بندیم نامحدود هست مثلا سطح1 --> سطح1-1 --> سطح 1-1-1 و غیره
    و فیلدهای جدول رو بصورت زیر طراحی کردم :
    id; parent; title
    سطح1; 0 ; 1
    سطح 2 ; 0; 2
    سطح 1-1; 1; 3
    سطح 1-2 ;1; 4
    سطح 2-1 ;2 ; 5
    سطح 2-2 ;2; 6
    سطح2-3 ;2 ; 7
    سطح1-1-1 ;3 ;8
    مقدار PARENT سطح1 رو صفر میزارم تا مشخص بشه که ریشه هستش.

    حالا میخوام تو یه کومبوباکس بصورت زیر نمایش بدم :

    سطح 1
    سطح1>سطح1-1
    سطح1>سطح1-1>سطح1-1-1
    سطح1>سطح1-2
    سطح2
    سطح2>سطح2-1
    سطح2>سطح2-2
    سطح2>سطح2-3

    که یه تابع بازگشتی نوشتم اما تابع ذکر شده در زیر ، خروجی زیر رو داره
    سطح 1
    سطح1>سطح1-1
    سطح1>سطح1-1>سطح1-1-1
    کد:
    function cat_tree(showall: boolean = false; root: integer = 0 ; prefix: string = ''): string;
    var
        wher,title,childs,str  : string;
    begin
        if(root=0) then wher:= ' parent= ' + IntToStr(root)
        else wher :='parent=' + IntToStr(root) + ' and parent<>id ';
        with Data.AQL_Temp1 do
        begin
        Close;
        SQL.Clear;
            SQL.Add('select * from group where  ' + wher + ' order by title');
        Open;
        First;
          while Not EOF do
          begin
              if prefix='' then str:='' else str:=prefix + '>';
              title:=str + VarToStr(Data.AQL_Temp1['title']);
              if showall then
              begin
            COMBO.Items.Add(title);
                  COMBO.Items.Add(childs);
              end
              else if (childs<>'')    then COMBO.Items.Add(childs) else COMBO.Items.Add(title);
          childs := cat_tree(showall, (Data.AQL_Temp1['id']), title);
          Next;
          end;
      end;
    end;
    ممنون میشم راهنمایی فرمایید تا مشکلم حل بشه .

    با تشکر




    ویرایش توسط beny : 22 / November / 2016 در ساعت 12:59 PM

  2. #2
    کاربر سایت beny آواتار ها
    تاریخ عضویت
    November 2013
    سن
    10
    نوشته ها
    41
    تشکر ها
    44
    تشکر شده 5 بار در 5 ارسال.

    پاسخ : طراحی گروه بصورت parent and child

    کد زیر تو php کار میکنه
    کد:
    function cat_tree($showall=false, $root=0, $prefix=''){
      $wher = $root==0 ? "parent=id" : "parent=$root && parent!=id";
    
      $CAT = mysql_query("SELECT id,caption name FROM category WHERE $wher");
    
      while($row = mysql_fetch_array($CAT)){
        $title = ($prefix=='' ? '' : "$prefix » ").$row['name'];
        $childs = cat_tree($showall, $row['id'], $title);
        $output .= $showall   ?   $title." (".$row['id'].") \n".$childs : ( $childs!='' ? $childs : $title." (".$row['id'].") \n" );
      }
      return $output;
    }

  3. #3
    کاربر سایت beny آواتار ها
    تاریخ عضویت
    November 2013
    سن
    10
    نوشته ها
    41
    تشکر ها
    44
    تشکر شده 5 بار در 5 ارسال.

    پاسخ : طراحی گروه بصورت parent and child

    با کد زیر مشکلم حل شد.
    function cat_tree(showall: boolean = false; root: integer = 0 ; prefix: string = ''): string;
    var
    wher,title,str : string;
    data1 : array of array of string;
    i,j:integer;
    begin
    if(root=0) then wher:= ' parent= ' + IntToStr(root)
    else wher :='parent=' + IntToStr(root) + ' and parent<>id ';
    with Data.AQL_Temp1 do
    begin
    Close;
    SQL.Clear;
    SQL.Add('select * from group where ' + wher + ' order by title');
    Open;
    end;
    Data.AQL_Temp1.First;
    if (Data.AQL_Temp1.RecordCount>0) then
    begin
    setlength(data1,Data.AQL_Temp1.RecordCount,3);
    for i := 0 to ((Data.AQL_Temp1.RecordCount)-1) do
    begin
    data1[i,0]:=VarToStr(Data.AQL_Temp1['id']);
    data1[i,1]:=VarToStr(DataAQL_Temp1['parent']);
    data1[i,2]:=VarToStr(Data.AQL_Temp1['title']);
    Data.AQL_Temp1.Next;
    end;
    end;
    j:=0;
    while j<>i do
    begin
    if prefix='' then str:='' else str:=prefix + '>';
    title:=str + VarToStr(data1[j,2]);
    Combo.Items.Add(title);
    cat_tree(showall, StrToInt(data1[j,0]), title);
    j:=j+1;
    end;
    end;

    با تشکر

موضوعات مشابه

  1. پاسخ: 14
    آخرين نوشته: 29 / September / 2015, 02:31 AM
  2. پاسخ: 1
    آخرين نوشته: 05 / August / 2015, 02:07 PM
  3. اجرای یک exe توسط دلفی به صورت Run as Admin
    توسط h_mohamadi در انجمن برنامه نویسی دسکتاپ در دلفی
    پاسخ: 3
    آخرين نوشته: 22 / June / 2015, 08:03 PM
  4. ایجاد و چیدن دکمه ها بصورت داینامیک
    توسط javad_rajabloo در انجمن دلفی 7
    پاسخ: 13
    آخرين نوشته: 16 / March / 2015, 02:49 PM
  5. شكل فرم برنامه تان را به صورت قلب در آوريد
    توسط ahmadi613 در انجمن سورس دونی
    پاسخ: 0
    آخرين نوشته: 22 / September / 2013, 02:15 AM

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •