تبلیغات
برنامه نویسی و الکترونیک - روشی برای نمایش گروهها و زیرگروه ها در یک برنامه بانک اطلاعاتی در یک TreeView
 
منوی اصلی


--------------------------

--------------------------

--------------------------

--------------------------


سفارش پروژه

E-Mail :
Mahmood_Mehri@Hotmail.com

سایت برنامه نویس :  Mahmood_M


موضوعات

دانلود نرم افزار
 
تخصصی برنامه نویسی
  تخصصی برق ( الکترونیک )
  کامپوننت ها و ابزارها
  نرم افزارهای متفرقه
برنامه نویسی
  مباحث عمومی
  آموزش Delphi

  آموزش زبان C++ / C
 
آموزش Matlab

  آموزش زبان Assembly
  آموزش DataBase

الکترونیک
  مباحث عمومی
  مباحث عمومی الکترونیک
  معرفی قطعات الکترونیکی
  کار با مولتی متر
  مدارات الکترونیک
  میکروکنترلر
  میکروکنترلرهای AVR
  پروژه ها
مباحث متفرقه
  آموزشهای متفرقه
  معرفی سایت
  معرفی کتاب
  پاسخ به سئوالات
  مطالب عمومی


لینك دوستان
:: جک :: اس ام اس :: عکس
:: الکترونیک 89 گیلان
:: سورسهای نرم افزاری
:: اینترنت بدون تحریم
:: علمی.کتاب.مجله.نرم افزار.مقاله
:: مبارزات آزاد
:: برنامه نویسی از اهل زمین
:: :: جزیره ی دانلود ::
:: :: کامپیوتر و IT ::
:: بزرگترین پایگاه مدل لباس اینترنتی
:: مرکز دانلود ایرانیان
:: پایگاه علمی مهندسی تراشه
:: تمامی راهکارهای کامپیوتری
:: برنامه نویسی و طراحی وب
:: خرید ساعت دیواری
:: :: فناوری روز ::
:: :: همه چیز واسه موبایل ::
:: آموزش تخصصی کامپیوتر
:: * پیاز داغ اینترنت ! *
:: جدیدترین موزیکها و نرم افزارها
:: دانلود سورس ویژوال بیسیک
:: امپراطور دانلود و آموزش
:: موبایل و کامپیوتر
:: جدیدترین آهنگهای هفته
:: درباره ی دلفی !
:: برنامه نویس
:: پروژه های رایگان و آموزش ++C
:: ابراهیم آنلاین

 : " روشی برای نمایش گروهها و زیرگروه ها در یک برنامه بانک اطلاعاتی در یک TreeView " :
 
با سلام ...
در این پست روشی رو برای نمایش لیست گروه ها و زیرگروه ها در یک برنامه ی بانک اطلاعاتی  ( با دلفی ) بررسی می کنیم که میتونه برای بعضی از دوستان که با DBTreeView ها ! مشکل دارند مفید باشه ... ! ( توجه کنید که در اینجا از بانک اکسس استفاده می کنیم ) ...
خوب ، بدون مقدمه ی اضافی شروع میکنیم ، فقط این رو بگم که این روش کاملا ساختگی هست و از جایی برداشت نشده یا استاندارد خاصی نداره ... !!

فرض کنیم ما در برناممون 3 تا جدول داریم :

  • جدولی برای نام گروهها
  • جدولی برای نام زیرگروهها
  • جدولی به عنوان جدول اصلی
به عنوان نمونه سایخت یک برنامه ی کتابخانه ی کوچک رو پی می گیریم ...
فرض میکنیم که نام جداول به صورت زیر هست :
  • GroupTable : برای لیست گروهها
  • SubGroupTable : برای لیست زیرگروهها
  • MainTable : جدول اصلی
نکته مهم :
در این برنامه ما سعی خواهیم کرد که مشخصات کتابها را در زیرگروه ها ثبت کنیم پس برای درج شدن مشخصات یک کتاب ، انتخاب گروه و زیرگروه الزامی است !
حالا نوبت به ساخت فیلدهای بانک های مورد نظر میرسه :

فیلد مربوط به جدول مربوط به گروه ها : ( فقط یک فیلد )
  1. GName : برای نام گروهها
فیلدهای مربوط به جدول مربوط به زیرگروه ها :
  1. GName : برای نام گروه ها
  2. SGName : برای نام زیرگروه ها
فیلدهای بانک اصلی : ( چون قصد نوشتن یک برنامه نمونه و کوچک رو داریم تنها به ساخت چند فیلد برای این جدول اکتفا میکنیم )
  1. BName : نام کتاب
  2. AName : نام نویسنده کتاب
  3. ...
  4. GName : نام گروه
  5. SGName : نام زیرگروه
بعد از ساخت جداول و فیدهای مربوطه ، سه ADOTable روی فرم گذاشته و نامهایی که در بالا اشاره شد را به آنها نسبت دهید ( درواقع جداول مربوط به گروه ها ، زیرگروه ها و جدول اصلی ) و درآخر یک TreeView روی فرم قرار داده و نام آن را به "MTreeView " تغییر دهید ...

بعد از مراحل بالا ما باید یک Procedure بنویسیم که اطلاعات موجود در جدول گروهها و زیرگروهها رو در یک TreeView ثبت کنه ...

Procedure مورد نظر باید به شکل زیر باشه :

procedure TMainFrm.UpdateTreeView;
var
 I, I2 : Integer;
 S : String;
 MyNode, Node, Parent : TTreeNode;
begin
 MTreeView.Items.Clear;
 GroupTable.First;
 SubGroupTable.First;
 Node := nil;
 for I := 0 to GroupTable.RecordCount-1 do
  begin
   S := GroupTableGName.Text;
   MyNode := MTreeView.Items.Add(Node, S);
   Parent := MyNode;
   SubGroupTable.Filter := 'GName = ' + QuotedStr(Parent.Text);
   SubGroupTable.Filtered := True;
   for I2 := 0 to SubGroupTable.RecordCount-1 do
    begin
     MTreeView.Items.AddChild(Parent, SubGroupTableSGName.Text);
     SubGroupTable.Next;
    end;
   Node := MyNode;
   GroupTable.Next;
  end;
 SubGroupTable.Filtered := False;
 GroupTable.Filtered := False;
end;

توجه کنید که برای این Procedure نام " UpdateTreeView " انتخاب شده است ...
روش کار بسیار ساده و جالب هست ... !
در ابتدای این Proceure ، ما چند متغیر تعریف کردیم :
  • متغیرهای I, I2 برای استفاده در دو حلقه For ( از نوع Integer )
  • متغیر S برای گرفتن و نوشتن متن نام گروه ها و زیرگروهها ( از نوع String )
  • متغیرهای MyNode ، ChildNode و Parent برای مشخص کردن آیتم های TreeView در Procedure ( از نوع TTreeNode )
در ابتدای این Procedure ما جداول GroupTable ( گروهها ) و SubGroupTable ( زیرگروه ها ) رو به ابتدا ( اولین رکورد ) می بریم ( با دستور First ) ، و متغیر MyNode را برابر با Nil قرار می دهیم.
سپس در ما در دو حلقه For تودرتو اقدام به نوشتن مقادیر در TreeView میکنیم ، در ابتدا حلقه For اول ما متغیر S را برابر با مقدار موجود در اولین رکورد جدول گروهها ( نام اولین گروه ) قرار میدهیم ، سپس یک آیتم در TreeView ایجاد کرده و متغیر MyNode را برابر با آیتم خواسته شده قرار می دهیم ، بعد متغیر Parent را برابر را مقدار MyNode قرار میدهیم و آن را به عنوان یک گروه که درواقع Parent چند زیرگروه است میشناسیم ، سپس جدول زیرگروهها رو با مقدار موجود در این آیتم TreeView فیلتر میکنیم ...
در مرحله بعد ، ما اقدام به ثبت یک آیتم Child در TreeView میکنیم ( با دستور AddChild ) ، دستور AddChild که در بالا استفاده شده ، دارای دو متغیر است که اولی برای Parent مربوط به آیتم ثبت شده و دیگری برای متن آیتم است.
توجه کنید که در هر دو حلقه For از دستور Next برای رفتن به رکورد بعدی در جدول مورد نظر استفاده کنید وگرنه کار با موفقیت انجام نخواهد شد ...
در مرحله بعد ما متغیر Node را برابر با MyNode قرار میدهیم و جدول گروهها را به رکورد بعدی برده و در آخر دو جدول را از حالت فیلتر خارج می کنیم.
نکته ای که در بالا باید توضیح داده بشه ، اینه که چرا در قسمت آخر ما متغیر Node رو برابر با MyNode قرار میدهیم ... !
اگه توجه کنید ما در اول کار با دستور Add ، یک آیتم به TreeView اضافه کردیم که " همانند اون " ( پارامتر اول دستور Add ) ، برابر با Nil بود چون آیتمی در TreeView نبود ، و وقتی که ما آیتم جدید را در TreeView ثبت میکنیم ( به عنوان یک گروه ) باید برای ایجاد آیتم بعدی ( گروه بعدی ) ، یک آیتم که از نوع گروه است به عنوان "همانند" به آیتم جدید اختصاص بدیم که با قرار مقدار MyNode در متغیر Node ، این کار در حلقه For اول انجام میشه ...

همانطور که در ابتدا اشاره شد بهتر است که ثبت اطلاعات در زیرگروه ها انجام بشه ، برای این کار می تونید در فرم مربوط به ثبت اطلاعات جدید دو تا ComboBox قرار بدید با همین روش و با کمی تغییر ، لیست گروه ها و زیرگروه ها رو در اون دو ComboBox بریزید و در هنگام ثبت اطلاعات از انتخاب شدن گروه و زیرگروه اطمینان حاصل کنید ...

نمایش رکوردهای مربوط به گروه یا زیرگروه انتخاب شده در TreeView ، در DBGrid :
برای این که وقتی کاربر یک گروه و یا زیرگروه رو در TreeView انتخاب کرد ، DBGrid فقط رکوردهای مربوط به همون گروه یا زیرگروه انتخاب شده رو نشون بده ، باید در هنگام انتخاب کردن آیتم های TreeView ، تشخیص بدید که آیا آیتم انتخاب شده Parent است یا Child ، اگر Parent ( گروه ) بود ، باید فیلد GName در جدول اصلی ( MainTable ) را با مقدار آیتم انتخاب شده فیلتر کنید همچنین در صورت Child بودن آیتم انتخاب شده ، باید عمل فیلتر را بر روی فیلد SGName مربوط به جدول اصلی انجام بدید ...

تصویری از TreeView ایجاد شده توسط این Procedure :
--------------------

--------------------
امیدوارم مفید بوده باشه ...

موفق باشید ..

 

 :: لینك ثابت نویسنده : محمود مهری نظرات Comment

مطالب اخیر

معرفی کانال و گروه های تلگرام
استفاده از Component Template ها در دلفی
مقاله : نحوه ی استفاده از پنل پیامک در نرم افزار
E-Book :: راه اندازی موتورهای DC و پله ای با استفاده از میکرو کنترلر AVR
آشنایی با عملگرهای بیتی ( Bitwise Operators )
تست دیود و ترانزیستور با مولتی متر
دلفی :: ارسال آرایه به حافظه ی Clipboard
یک سایت فوق العاده برای علاقه مندان به علم فیزیک
مداری برای نمایش عبور جریان برق از بدن !!
سال نو مبارک ...
آدرس وبلاگ !
ساخت یک LED فلاشر با میکروکنترلر AVR ATMega16A
آشنایی با کاربرد " رله " ( Relay ) در مدار
کار با ماتریسها در Matlab
SQL :: آشنایی با دستور شرطی WHERE


صفحات وبلاگ :