PDA

View Full Version : checkbox در treeview



marmar
یک شنبه 13 شهریور 1384, 09:04 صبح
سلام
من می خوام وقتی یک nodeاز treeviewرو انتخواب کردم بقییه تیک های treeviewحذف شود یعنی در آن واحد فقط یک node تیک خورده باشد

لطفا راهنماییم کنید
با تشکر

marmar
یک شنبه 13 شهریور 1384, 13:48 عصر
pleaze help me :ناراحت: :افسرده:

marmar
دوشنبه 14 شهریور 1384, 07:59 صبح
کسی نیست کمکم کنه؟

یاشار
شنبه 19 شهریور 1384, 18:48 عصر
برای اینکار روش‌های مختلفی می‌شه به کار برد.

روش اول اینکه یک متغییر داشته باشید که حواسش به node ی که چک داره باشه و هر وقت node جدیدی کلیک شد، قبلی رو پاک کنه. خوبی این روش اینه که با هر بار کلیک، لازم نیست کل node ها رو بگردیم تا مطمئن بشیم همه unchecked هستند. ولی لازمه‌اش اینه که دفعه اول که node ها رو بارگذاری می‌کنیم بیشتر از یکی، checked نباشه.

روش دیگه هم اینه که هر بار که یک Node کلیک می‌شه، بررسی کنیم که آیا Node ی تیک خورده یا نه و اگر تیک خورده بود برش داریم. این روش به درد وقتی می‌خوره که از قبل معلوم نباشه چند تا Node تیک خورده داریم ولی وقتی تعداد Node ها زیاد باشه، روی سرعت اجرای برنامه تاثیر منفی میذاره.

روش اول روی TreeView سمت چپ، و روش دوم روی TreeView سمت راست پیاده شده. در ضمن هر بار که تیک Node ها رو در BeforeCheck ، از طریق کدنویسی عوض می‌کنیم، Event مربوطه هم اتفاق می‌افته که باعث می‌شه برنامه توی حلقه بی‌نهایت بیفته. برای اینکه از اینکار جلوگیری بشه، یک متغیر به نام ClickByUser از نوع bool تعریف می‌کنیم و با استفاده از اون، از Event هایی که بوسیله کدنویسی اتفاق می‌افتند جلوگیری می‌کنیم.

marmar
یک شنبه 20 شهریور 1384, 10:23 صبح
سلام
واقعا مرسی از راهنماییتون آقای یاشار

اما من تحت وب کار می کنم و componenetکه برای treeview استفاده کردم ActiveUp.WebControls.dll این است

من تو list فرمم توproperties درختم beforechecked ندارم حالا چی کار کنم؟

با تشکر از توجه شما به مطالب ارسالی

marmar
یک شنبه 20 شهریور 1384, 11:37 صبح
سلام

ببخشید اما یه مشکل دیگه هم دارم و اون اینه که تو خط تعریفcheck node هم error می گیره
تو این خط: private TreeNode CheckedNode; چون همچین نوع متغیری تعریف شده نیست

حالا می گید چی کار کنم؟

یاشار
یک شنبه 20 شهریور 1384, 12:39 عصر
کنترل‌های web به طور کلی بحث‌شون جداست. هر چند طراح‌های Net. سعی کردن تا جای ممکن کنترل‌های وب و winform رو شبیه هم درست کنن، ولی طرز کار این دو تا باهم متفاوته. متاسفانه من با کنترلی که شما استفاده می‌کنید آشنایی ندارم و نمی‌دونم چه مزیتی نسبت به کنترل استاندارد VS داره، ولی فکر نمی‌کنم با هم تفاوت اساسی داشته باشند. فقط مشکل اینجاست که در حال حاضر جایی هستم که IIS نصب نیست و نمی‌تونم این کار رو روی TreeView استاندارد امتحان کنم. به هر حال منطق کار همینه که شما باید یک Event مناسب انتخاب کنید که موقع تیک زدن Node ها ، Invoke بشه و اونجا Node قبلی رو از حالت Checked خارج کنید. با این تفاوت که :

کنترل‌های وب از اونجایی که «طرف سرور» هستند، باید روی سرور اجرا بشند، هر تغییری که توشون داده بشه یه PostBack اتفاق می‌افته و صفحه به سرور فرستاده می‌شه تا تغییرات توسط سرور اعمال بشه. احتمالا این چیزی نیست که شما می‌خواهید، حدس من اینه که شما می‌خواهید وقتی کاربر تیک Node ها رو عوض می‌کنه همه کار در سمت Client انجام بشه و وقتی کاربر کارش تموم شد مثلا با زدن یک دکمه نتیجه نهایی به سرور گزارش بشه.

برای اینکار احتیاج هست که Event های TreeView به وسیله جاوا اسکریپت در مرورگر پردازش بشن. یه نگاهی به اینجا (http://www.codeproject.com/aspnet/ClientSideTreeView.asp) بندازید. دقیقا اون چیزی که شما می‌خواهید نیست، ولی می‌تونه بهتون ایده بده. می‌تونید عبارت زیر رو هم جستجو کنید.

client-side event handling webcontrols asp.net

پ.ن :

TreeNode هم ایراد می‌گیره، باید هم بگیره، چون از کنترل‌های WinForm هست.

جزو مشخصات TreeView (http://www.componentsource.com/Catalog.asp?fl=&sc=CS&option=14463&PO=515674) یی که شما استفاده می‌کنید، ذکر شده :
The whole states are preserved both at client-side and server-side

احتمالا احتیاجی به دردسرهای بالا نیست، به راهنمای کنترلتون مراجعه کنید احتمالا مشکلتون حل می‌شه.

marmar
یک شنبه 20 شهریور 1384, 14:57 عصر
بازم مرسی

once4ever
پنج شنبه 25 اسفند 1384, 18:35 عصر
سلام
من یک treeview درست کردم و یک آرایه دارم شامل چند رشته که نام چندتا از این node هارو داره.
چجوری میتونم یک node از treeview رو بر اساس عنوانش انتخاب کنم و مقدار checked بهش بدم؟
(توجه داشته باشید که node ها تودرتو هستند)