PDA

View Full Version : برگرداندن شاخه ها و زیر شاخه های انتخاب شده treeview



Hossein Bazyan
شنبه 03 فروردین 1387, 21:05 عصر
سلام
من در web application مجبور به استفاده از treeview شده ام . به این ترتیب که treeview را با دیتا بیس بایند کرده ام و treeview هم دارای checkbox میباشد. کاربر باید بتواند مقادیر مورد نظر خود را از treeview انتخاب و سپس مقادیر select شده برگشت داده شده و پس از اعمال یکسری تغییرات در دیتابیس ذخیره شود.
بایند کردن و ذخیره کردن را مشکل ندارم ، مشکل من اینه که نمیتوانم چطوری باید node ها child ها انتخاب شده را به دست آمورم. همه سایت را جستجو کرده ام و انواع کد موجود را هم امتحان کردم اما به جواب نرسیدم.
از اینترنت هم نتوانستم چیزی به دست بیارم. دوستان راه حلی سراغ دارند؟

MehranZand
شنبه 03 فروردین 1387, 21:38 عصر
SelectedNode.Value مشکل شما را مگه حل نمیکنه؟

Hossein Bazyan
شنبه 03 فروردین 1387, 21:48 عصر
SelectedNode.Value مشکل شما را مگه حل نمیکنه؟
سلام
به طرق مختلف امتحانش کردم اما جواب نگرفتم. میشه کدش رو بذاری

نمونه کد زیر رو هم امتحان کردم

For x1 AsByte = 0 To TreeView1.Nodes.Count - 1
If TreeView1.Nodes(x1).Checked = TrueThen
' Checked
Else
'UnChecked
EndIf
Next

MehranZand
شنبه 03 فروردین 1387, 21:59 عصر
شما تمام ند هایی که چک خوردن را می خواهید و فقط یه Value نیست! درسته؟

MehranZand
شنبه 03 فروردین 1387, 22:15 عصر
از این روش مقادیر چک خورده رو می تونی بدست بیاری:


string str = string.Empty;
TreeNodeCollection treeCheckedNodes = new TreeNodeCollection();
treeCheckedNodes = TreeView1.CheckedNodes;
for (int i = 0; i < treeCheckedNodes.Count; i++)
{
str += treeCheckedNodes[i].Value + " ";
}

Hossein Bazyan
شنبه 03 فروردین 1387, 22:26 عصر
شما تمام ند هایی که چک خوردن را می خواهید و فقط یه Value نیست! درسته؟
دقیقا"

کد زیر هم کار نمیکنه .
من یه screen shoot از برنامه گذاشتم .
ببین من میخوام با زدن کلید Button میخوام تشخیص بدم که از ند اول دو فرزند
"-0001 - Phase 0001 Task 0001 (http://javascript<b></b>:__doPostBack('ctl00$ContentPlaceHolder1$TreeView1 ','s0001\\0001'))" و "-0002 - Last Test (http://javascript<b></b>:__doPostBack('ctl00$ContentPlaceHolder1$TreeView1 ','s0001\\0002'))" و از ند دوم فرزند "-0001 - Task number 1 (http://javascript<b></b>:__doPostBack('ctl00$ContentPlaceHolder1$TreeView1 ','s0002\\0001'))" تیک خورده است و اینها را در دیتا بیس ذخیره کنم و به بقیه کاری نداشته باشم
. در ضمن خروجی این کدی که گذاشتید چیه ؟ در str چیزی ذخیره نمیشه ؟

MehranZand
شنبه 03 فروردین 1387, 23:34 عصر
کدی که گذاشتم ندهایی که تیک خوردند رو تشخیص میده و Value این ندها را در یک رشته با
یک فاصله خالی بر میگردونه، خروجی هم رشته است مشخصه، مشکل چیه؟
البته این رو به عنوان یک نمونه نوشتم و فقط به عنوان یه راه حل مطرح کردم، شما با توجه به کدها و
کنترل هایی خودتون دوباره کد نویسی کنید.

Hossein Bazyan
شنبه 03 فروردین 1387, 23:42 عصر
سلام

من از وی بی استفاده میکنم و کد شما را به کد زیر تبدیل کردم .

Dim str AsString = String.Empty
Dim treeCheckedNodes AsNew TreeNodeCollection()
treeCheckedNodes = TreeView1.CheckedNodes
Dim i AsInteger = 0
While i < treeCheckedNodes.Count
str = str & treeCheckedNodes(i).Value + " "
EndWhile


اما کنترل برنامه اصلا داخل حلقه نمیره ! با اینکه من همه تیکها را انتخاب میکنم. str همیشه خالیه

MehranZand
شنبه 03 فروردین 1387, 23:53 عصر
VB


Dim str As String = String.Empty
Dim treeCheckedNodes As TreeNodeCollection = New TreeNodeCollection()
treeCheckedNodes = TreeView1.CheckedNodes
Dim i As Integer
For i = 0 To treeCheckedNodes.Count - 1 Step i + 1
str += treeCheckedNodes(i).Value + " "
Next

Hossein Bazyan
یک شنبه 04 فروردین 1387, 00:26 صبح
VB


Dim str As String = String.Empty
Dim treeCheckedNodes As TreeNodeCollection = New TreeNodeCollection()
treeCheckedNodes = TreeView1.CheckedNodes
Dim i As Integer
For i = 0 To treeCheckedNodes.Count - 1 Step i + 1
str += treeCheckedNodes(i).Value + " "
Next

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

MehranZand
یک شنبه 04 فروردین 1387, 00:34 صبح
نقطه انفصال بذار دیباگ کن ببین مشکل کار کجاست، خیلی سادست مشکلی در کار نیست
من چند بار چک کردم.

Hossein Bazyan
یک شنبه 04 فروردین 1387, 00:41 صبح
نقطه انفصال بذار دیباگ کن ببین مشکل کار کجاست، خیلی سادست مشکلی در کار نیست
من چند بار چک کردم.
سلام
مرسی از اینکه زود جواب میدی.
من نقطه انفصال گذاشتم که میگم داخل حلقه نمیاد. فقط موضوعی که به ذهنم رسید اینه که من این کد رو داخل یک command button نوشته و با رویداد کلیک فعال میشه . من سه نقطه گذاشتم . با زدن کلیک روی دکمه کنترل داخل آن میشه و قبل از حلقه هم نقطه گذاشتم آنجا هم میاد. کنترل داخل حلقه نمیره بلکه بعد از حلقه را اجرا میکنه

اگه امکانش هست مصفحه ای را که کد ر توش نوتی برام بفرست روی آن امتحان کنم . شاید کد asp درست نباشه .
کد asp هم به شکل زیر است

<asp:TreeViewID="TreeView1"runat="server"Font-Names="Tahoma"Font-Size="10pt"
ForeColor="Black"Height="318px"ShowCheckBoxes="All"onclick="client_OnTreeNodeChecked();"style="vertical-align: top; text-align: left; border-top-width: thin; border-left-width: thin; border-left-color: white; border-bottom-width: thin; border-bottom-color: white; border-top-color: white; border-right-width: thin; border-right-color: white;"Width="375px">
<SelectedNodeStyleForeColor="White"/>
</asp:TreeView>

MehranZand
یک شنبه 04 فروردین 1387, 00:46 صبح
خواهش میکنم دوست من، سورسی که الان با VB نوشتم را براتون upload کردم.

Hossein Bazyan
یک شنبه 04 فروردین 1387, 01:16 صبح
سلام
مرسی . کد کار میکنه .
فکر میکنم من چون درخت را با کدنویسی بایند کرده ام کار نمیکنه . شما در کدهای asp درخت را تعریف کرده ای اما این کار برای من امکان پذیر نیست چون باید از دیتابیس درخت پر بشه . کدی که برای asp نوشته ام را هم ضمیمه کردم .
آیا امکانش هست دلیلش این باشه و اگر بله چطور رفع میشه ؟

MehranZand
یک شنبه 04 فروردین 1387, 01:32 صبح
کد ها تونو بذارید ممنون میشم. (کامل)

Hossein Bazyan
یک شنبه 04 فروردین 1387, 01:35 صبح
سلام
درست شد . خیلی عالی کار میکنه . باور کن دو روزه در اینترنت جستجو میکنم نتوانستم پیدا کنم . دست شما درد نکنه عالی بود.