PDA

View Full Version : مشکل با TreeView (نحوه ی ذخیره و بازیابی از دیتابیس)



hamid-nic
شنبه 15 خرداد 1389, 22:54 عصر
سلام دوستان ، وقتتان بخیر
با TreeView می خواهم اطلاعاتی مثل اطلاعات موجود در عکس زیر را در دیتابیس بنویسم و بخوانم .

http://barnamenevis.org/forum/attachment.php?attachmentid=50533&stc=1&d=1275763244http://barnamenevis.org/forum/attachment.php?attachmentid=50534&stc=1&d=1275763244


آیا روش خاصی برای این کار وجود دارد .
من بصورت دستی اطلاعات هریک از موارد را در بانک بصورت عکس زیر وارد کردم . آیا می توان بر اساس این اطلاعات که در بانک ذخیره کردم آنها را در TreeView بیارم و نمایش بدهم .




http://barnamenevis.org/forum/attachment.php?attachmentid=50535&stc=1&d=1275763244
دوستان لطفا راهنمایی کنید .
از لینک های زیر هم استفاده کردم نتونستم به نتیجه برسم :
لینک 1 (http://barnamenevis.org/forum/showthread.php?t=70015)
لینک 2 (http://barnamenevis.org/forum/showthread.php?t=155523&highlight=TreeView)
لینک 3 (http://barnamenevis.org/forum/showthread.php?t=155921&highlight=TreeView)

حمیدرضاصادقیان
شنبه 15 خرداد 1389, 23:07 عصر
سلام.یک راه این هست که شما به صورت یک حلقه و با توجه نوع کدینگی که دارید اطلاعات رو وارد کنید.شما اگر ساختار جدول رو به صورت ساختار زیر داشتید راحتتر بود.
id,parentid,name که id همون id شماست و idparent کد id هست که مجموعه شما زیر مجموعه یک مجموعه اصلی قرار میگیره.به طور مثال کد اول 11 است و شما میخوای کد 1101 رو قرار بدی در id مقدار 1101 قرار میگیره و در idparent مقدار 11 که با توجه به idparent خیلی راحت میتونی اطلاعات رو در treeview قرار بدی.ولی الان شما باید یک حلقه تشکیل بدی و در هر حلقه مقدار id رو بخونی و در یک متغیر قرار بدی و بررسی کنی اگر طول متغیر برابر 2 بود اون وقت در شاخه اصلی قرار میگیره و مقدار اونو به selectedindex نودی که ایجاد میکنی اختصاص بدی . بعد مقدار بعدی که میخونی اگر مساوی با 4 بود دو رقم اول اونو بخونی و در selected index چک کنی اگر یک همچین مقداری بود به اون نود رفته و زیر مجموعه براش ایجاد کنی.
و این روش تا اخر اطلاعات جدولت ادامه داره.
باز سوالی بود در خدمتم.
موفق باشید.

حسین شهریاری
شنبه 15 خرداد 1389, 23:42 عصر
سلام

من هم با نظر آقای صادقیان موافقم! ولی این نکته را فراموش نکنید که برای این کار از دوروش میشه استفاده کرد:
1-روش بازگشتی که خیلی وقتگیر هست ولی نوشتن کدش ساده هست:در این روش در همون دفه اول تمام گره ها به همراه زیر گره های آنها تشکیل میشن که البته خیلی هزینه بر هست.

2-در مرحله اول به روش غیر بازگشتی سطح اول (گره های پدر) ساخته میشن و بعد هر گره ای را که کاربر انتخاب کرد زیر گره هاش ساخته بشن.در این صورت گره هایی که ملاقات نمیشن یا به اونا احتیاج نیست ساخته نمیشن.

موفق باشید

hamid-nic
یک شنبه 16 خرداد 1389, 00:50 صبح
سلام ممنون از پاسخ هایتان آقای صادقیان و آقای شهریاری
ببینید آقای شهریاری من باید از روش اولی که شما گفتید استفاده کنم . یعنی کاربر باید همه ی موارد را داشته باشد .
اما در مورد گفته ی آقای صادقیان یه روش ساده ی دیگه ای هم هست اون این که اگر در جدول بالا که گذاشتم بر روی ستون ID برای مقادیر 0 "صفر" فیلتر بگذاریم تمام گره های اصلی بدست می آید . و به همین ترتیب اگر برای مقادیر 10 "ده" فیلتر بگذاریم تمام گره های فرعی قسمت اول یعنی "زیر مجموعه ی کامپیوتر" بدست می آید و دوباره به همین ترتیب اگر برای مقادیر 11 فیلتر بگذاریم تمام گره های فرعی قسمت دوم یعنی"زیر مجموعه های برق" بدست می آید و همین طور الی آخر . . . .
مشکل طریقه ی نوشتن کد اونه که باید به چه نحوی بنویسم ؟ :متفکر:

حمیدرضاصادقیان
یک شنبه 16 خرداد 1389, 01:12 صبح
سلام.ببینید روشی که شما میخواهید با همون روشی که توضیح دادم میتونید کدشو بنویسید.
در یک حلقه مقدار هر id رو در یک متغیر ذخیره کنید بعد وقتی که در نود اضافه کردید مقدار Selected index نود هم برابر همون id قرار بدید. در مرتبه بعد وقتی که مقدار طول id برابر 4 بود یعنی اینکه این نود زیرمجموعه یک نود دیگه هست .شما دورقم اول اونو جدا کرده و دنبال parent اون با توجه به Selected index میگردید.و به همین روش تا انتها ادامه میدین.فقط برای مقدار صفر باید همشونو اضافه کنید.
ولی روشی که من برای جدول بهتون پیشنهاد دادم خیلی ساده تر هست و با یک parent id خیلی راحت میتونید زیر مجموعه اونو پیدا کنید.حتی میتونید با یک کوئری شکل این treeview رو تشکیل بدید و از ابتدا تا انتهای اونو در داخل treeview اضافه کنید.
موفق باشید.

hamid-nic
یک شنبه 16 خرداد 1389, 01:18 صبح
آقای صادقیان می توانید در این مورد خاص مرا کمک کنید .
نمونه کدی با روش خودتون که بتونه نمایش درخت بالا از بانک را داشته باشه بزارید . با کمک شما ویرایش می کنم تا به نتیجه برسم .

حمیدرضاصادقیان
یک شنبه 16 خرداد 1389, 01:19 صبح
در ضمن لینک زیر توضیحات جالبی ارائه داده.
http://www.sqlteam.com/article/more-trees-hierarchies-in-sql
http://www.yafla.com/papers/sqlhierarchies/sqlhierarchies.htm

حمیدرضاصادقیان
یک شنبه 16 خرداد 1389, 01:59 صبح
سلام دوست عزیز.
این ساختار جدولی هست که من ایجاد کردم.


CREATE TABLE [dbo].[Tbl_Test](
[id] [int] IDENTITY(1,1) NOT NULL,
[parent_id] [int] NULL,
[Name] [nvarchar](50) NULL
) ON [PRIMARY]

عکس اطلاعات وارد شده و نمونه پروژه رو برای شما ارسال کردم.سوالی بود درخدمتم.

hamid-nic
یک شنبه 16 خرداد 1389, 02:14 صبح
واقعاً ممنونم آقای صادقیان
من جدول را با داده های موجود در تصویری که شما ضمیمه کرده بودید ایجاد کردم برنامه را اجرا کردم و حاصل شد این :

http://barnamenevis.org/forum/attachment.php?attachmentid=50552&stc=1&d=1275775507

یه کمی جابجایی داره اون را باید اصلاح کنم و نتیجه را می گذارم .
ممنون

hamid-nic
دوشنبه 17 خرداد 1389, 01:51 صبح
سلام آقای صادقیان
این قسمت از کدتون را
currentnode := TreeView1.Items.Item[Parentid];
به این تبدیل کردم درست شد .
currentnode := TreeView1.Items.Item[Parentid-1];

hamid-nic
دوشنبه 17 خرداد 1389, 09:54 صبح
آقا یه مشکل جدید :
دنبال TreeView می گشتم که خاصیت چک باکس یا انتخاب را داشته باشه که به مجموعه کامپوننت Raiz برخوردم .
حالا برای ذخیره ی مقادیر انتخاب شده در این TreeView در دیتابیس باید چه کرد و از چه روشی استفاده کرد ؟
برای خواندن اطلاعات ذخیره شده و ریختن آنها در یک TreeView معمولی چکار کنم و باز از چه روشی استفاده کنم ؟
در پست های بالا هدف فقط نمایش اطلاعات ثابت ذخیره شده در بانک در یک TreeView بود اما حالا اطلاعات موجود در بانک متغیره و باید از یه روش دیگه استفاده کرد .:متفکر:

حمیدرضاصادقیان
دوشنبه 17 خرداد 1389, 13:22 عصر
سلام. treeview با همون روشی که بهتون گفتم میتونید با همون ابزار raize هم کارکنید. شیوه کارشون دقیقا مثل هم هست. فقط یک خاصیت به نام Checked داره که میتونی با اون کنترل کنی چیا Check شده یا نشده اند.

Vafa-1391
جمعه 12 مهر 1392, 17:00 عصر
سلام خدمت اساتيد
ببخشيد كه تاپيك قديمي رو بالا مي اورم براي طرح سوال لازم است

من با استفاده از مطالب بيان شده سعي كردم جدولم را به شكل درختي نمايش دهم
با توجه به اين كه احتمال حذف ركوردها از طرف كاربر وجود دارد مشکل این است که اگر سریال Id در جدول پشت سر هم نباشد رسم درخت با مشکل مواجه می گردد

اگر اساتيد براي حل مشكل راهي دارند لطفا دريغ نفرماييد
با تشكر

Mahmood_M
شنبه 13 مهر 1392, 15:05 عصر
این تاپیک (http://barnamenevis.org/showthread.php?70015-%D9%85%D9%82%D8%A7%D9%84%D9%87-%D8%B1%D9%88%D8%B4%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%DA%AF%D8%B1%D9%88%D9%87%D9%87%D8%A7-%D9%88-%D8%B2%DB%8C%D8%B1%DA%AF%D8%B1%D9%88%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-%DB%8C%DA%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%A8%D8%A7%D9%86%DA%A9-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%DB%8C-%D8%AF%D8%B1-%DB%8C%DA%A9-TreeView) رو ببینید