PDA

View Full Version : انتخاب مجدد گره بعد از load یک treeview



f.nabavi
دوشنبه 09 فروردین 1389, 17:46 عصر
سلام
من روی یک گره از treeview که از دیتابیس پر میشه ، تغییراتی میدم. بعد تغییرات رو ثبت میکنم و tree رو دوباره از دیتابیس میخونم و tree رفرش میشه. حالا میخوام بعد از refresh شدن tree، دوباره همون گره انتخاب بشه. چی کار باید بکنم؟

mehdi.mousavi
سه شنبه 10 فروردین 1389, 00:13 صبح
سلام
من روی یک گره از treeview که از دیتابیس پر میشه ، تغییراتی میدم. بعد تغییرات رو ثبت میکنم و tree رو دوباره از دیتابیس میخونم و tree رفرش میشه. حالا میخوام بعد از refresh شدن tree، دوباره همون گره انتخاب بشه. چی کار باید بکنم؟

سلام.
TreeView یه Property داره به اسم SelectedNode. اونو باید مساوی TreeNode مورد نظرتون قرار بدید تا انتخاب بشه.

موفق باشید.

f.nabavi
سه شنبه 10 فروردین 1389, 10:17 صبح
مرسی از کمکتون ولی جواب نداد. من میخوام گره انتخاب شده حالت expand داشته باشه یعنی بعد از اجرای refresh روی درخت ، ظاهرش تغییری نکنه و گره هایی که expand هستن همچنان expand باشن. کدی که استفاده کردم اینه:

Dim snode As TreeNode
snode = tv1.SelectedNode
بعد از اجرای تغییرات:

filltree()

tv1.Select()
tv1.Nodes(0).Expand()
tv1.SelectedNode = snode
tv1.SelectedNode.Expand()

mehdi.mousavi
سه شنبه 10 فروردین 1389, 11:46 صبح
مرسی از کمکتون ولی جواب نداد. من میخوام گره انتخاب شده حالت expand داشته باشه یعنی بعد از اجرای refresh روی درخت ، ظاهرش تغییری نکنه و گره هایی که expand هستن همچنان expand باشن. کدی که استفاده کردم اینه:

سلام.
قبل از اینکه ببینیم چطوری باید اینکارو کرد، شما به این سوال من پاسخ بدید: چرا از همون اول، Node ای که تغییر کرده + شاخه های زیریش (در صورت نیاز) رو فقط Refresh نمی کنید؟ چه دلیلی داره که دوباره کل اطلاعات رو از بانک بگیرید و بخواهید درخت رو از نو Populate کنید؟ مگه تغییر در یک گره، باعث تغییر در Parent ها یا شاخه های دیگه درخت هم میشه؟

موفق باشید.

f.nabavi
سه شنبه 10 فروردین 1389, 13:25 عصر
چه طوری میشه یک قسمت رو refresh کرد؟ چنین امکانی فقط به treeview داده شده(؟).
تغییراتی که من در گره ها میدم در حقیقت بالا و پایین کردن اونها در levelخودشون هست. مثلا کاربر بتونه یک گره رو بالای گره ای بذاره. ولی از اونجایی که tree توسط دیتابیس ساخته میشه، باید تغییرات در سطح دیتا بیس باشه بعد مجددا tree که ساخته شد به صورتی باشه که کاربر میخواسته. حالا میخوام کاربر متوجه reload شدن tree نشه. اگر هم بخوام بعد از تغییر دیتابیس reload نکنم و ظاهری فقط اسم گره ها رو عوض کنم ، در گره هایی که خودشون زیر گره داشتن به مشکل میخورم و اونها رو دیگه نمیتونم به گره پایینی یا بالایی منتقل کنم.

mehdi.mousavi
سه شنبه 10 فروردین 1389, 13:51 عصر
تغییراتی که من در گره ها میدم در حقیقت بالا و پایین کردن اونها در levelخودشون هست. مثلا کاربر بتونه یک گره رو بالای گره ای بذاره. ولی از اونجایی که tree توسط دیتابیس ساخته میشه، باید تغییرات در سطح دیتا بیس باشه بعد مجددا tree که ساخته شد به صورتی باشه که کاربر میخواسته. حالا میخوام کاربر متوجه reload شدن tree نشه. اگر هم بخوام بعد از تغییر دیتابیس reload نکنم و ظاهری فقط اسم گره ها رو عوض کنم ، در گره هایی که خودشون زیر گره داشتن به مشکل میخورم و اونها رو دیگه نمیتونم به گره پایینی یا بالایی منتقل کنم.

سلام.
متوجه مساله نمیشم. وقتی شما Node ها رو در درخت جابجا می کنید، (حالا یا با Drag & Drop یا با UI ای که برای اینکار خودتون درست کرده اید)، UI به وضعیت جدید خودش رفته و دیگه چه نیازی هستش که بخواهید Refresh اش کنید؟ فقط کافیه بانک هم با اون Sync بشه.

به بیان دیگه، فرض کنید کاربر نودی رو بصورت Drag & Drop به جای دیگه ای از درخت منتقل میکنه. این انتقال یا موفقیت آمیزه، یا نیست. کی موفقیت آمیزه؟ وقتیکه توی بانک هم این انتقال اعمال بشه (قاعدتا با تغییر Parent ID نود مزبور در درخت). خوب، وقتی توی بانک این تغییر اعمال بشه، تو UI هم براحتی میشه با تغییر همون Parent (یا خصائص دیگه نود) جای جدید نود رو تعیین کرد. در نتیجه اصلا Reload ای توی این سناریو وجود نداره.

مگه اینکه کار دیگه ای کرده باشید که خوب، طبیعتا باید بیشتر توضیح بدید.

موفق باشید.

Alirezanet
سه شنبه 10 فروردین 1389, 20:10 عصر
سلام.
متوجه مساله نمیشم. وقتی شما Node ها رو در درخت جابجا می کنید، (حالا یا با Drag & Drop یا با UI ای که برای اینکار خودتون درست کرده اید)، UI به وضعیت جدید خودش رفته و دیگه چه نیازی هستش که بخواهید Refresh اش کنید؟ فقط کافیه بانک هم با اون Sync بشه.

به بیان دیگه، فرض کنید کاربر نودی رو بصورت Drag & Drop به جای دیگه ای از درخت منتقل میکنه. این انتقال یا موفقیت آمیزه، یا نیست. کی موفقیت آمیزه؟ وقتیکه توی بانک هم این انتقال اعمال بشه (قاعدتا با تغییر Parent ID نود مزبور در درخت). خوب، وقتی توی بانک این تغییر اعمال بشه، تو UI هم براحتی میشه با تغییر همون Parent (یا خصائص دیگه نود) جای جدید نود رو تعیین کرد. در نتیجه اصلا Reload ای توی این سناریو وجود نداره.

مگه اینکه کار دیگه ای کرده باشید که خوب، طبیعتا باید بیشتر توضیح بدید.

موفق باشید.

من همین کد رو استفاده کردم و داره کار میکنه !
فکر میکنم Snode شما باید یه چک بشه که همون کره هست یا نه ؟!
در ضمن پیشنهاد میدم خود گره رو جایی نگه نداین چون بعد از اعمال تغییرات ساختار treeview شما تغییر میکنه و گره مورد نظرتون پیدا نمیشه ...
یه چیزی مثه Tag یا Key هر نود میتونه کمکتون کنه برای پیدا کردن گره مورد نظر ! .