PDA

View Full Version : مشکل با درج از بانک اطلاعاتی به treeview



arshad89
چهارشنبه 13 مرداد 1389, 17:21 عصر
با سلام
یه سوال درباره نحوه خواندن و نمایش به صورت treeview دارم.
من در یک جدول عناوین را ذخیره کردم.
id
valed
onvan

id یک فیل autonumber هست.
valed، آیدی والد فیلد هست که اگر .الد نداشته باشد 0 می باشد.
onvan عنوان فیلد هست.

حالا یکی یکی از جدول هر رکورد را می خونم و اگر valed آن 0 باشد با این کد به treeview اضافه میشود
(TreeView1.Items.Add(nil,onvan
و اگر که والد نباشه
;(TreeView1.Items.AddChild(TreeView1.Items.Item[valed-1],onvan
مشکل وقتی پیش میاد که رکود فرزندی بعد از رکورد والد نباشه.یعنی بدون ترتیب درج بشه در جدول.
id valed onvan
1 0 Koh
2 1 sahand
3 1 damavand
4 0 darya
5 4 oman
6 4 khazar
7 1 sabalan

مشکل دقیقا وقتی پیش میاد که sabalan اضافه میشه. با کد من سبلان به صورت فرزند خزر اضافه میشود.
چه کار کنم که حل بشه؟؟؟؟

arshad89
شنبه 16 مرداد 1389, 09:40 صبح
یکی نیست کمک کنه؟؟؟؟؟:گریه:

shpegah
شنبه 16 مرداد 1389, 11:44 صبح
دوست عزيز مشكلت را مشخص نكردي چيست راهت درست است وجواب ميدهد فقط بهتر بود idرا بجاي اتونامبر مقدار Treeview.items.item را قرار ميدادي چون در صورت حذف ركورد ترتيب item درخت را به هم ميريزي.

arshad89
شنبه 16 مرداد 1389, 18:38 عصر
دوست عزيز مشكلت را مشخص نكردي چيست راهت درست است وجواب ميدهد فقط بهتر بود idرا بجاي اتونامبر مقدار Treeview.items.item را قرار ميدادي چون در صورت حذف ركورد ترتيب item درخت را به هم ميريزي.

میشه بیشتر توضیح بدید؟؟؟؟
مشکل من اینه که با این کد، همه نودها به والد خودشون مربوط نمیشوند.و دقیقا مشکل وقتی پیش می اید که یک گره فرزند دقیقا بعد از گره پدر خودش در جدول قرار نگیرد.مثلا در مثالی که اوردم اگر چند رکورد به جدول اضافه شود به این صورت

8 1 alborz

9 1 alvand

10 4 khalijefars




در این مثال khalijefars به گره sabalan مربوط می شود و فرزند سبلان میشود در حالی که باید فرزند koh که رکورد 4 است باشد!!!!! چرا؟؟؟؟

shpegah
یک شنبه 17 مرداد 1389, 11:31 صبح
شما يك آرايه مانند TmpId:array[1..100] of TTreeNode تعريف كنيد سپس مانند زير عمل نماييد


for i:=1 to 10 do
if TblValed[i]=0 then
TmpId[i]:=TreeView1.Items.Add(nil,TblOnvan[i])
else
TmpId[i]:=TreeView1.Items.AddChild(TmpId[TblValed[i]],TblOnvan[i]);


برخلاف تصور شماره item درخت شما اتونامبر نيست بلكه itemId مشخص كننده هر نود شماست

arshad89
یک شنبه 17 مرداد 1389, 12:18 عصر
شما يك آرايه مانند TmpId:array[1..100] of TTreeNode تعريف كنيد سپس مانند زير عمل نماييد


for i:=1 to 10 do
if TblValed[i]=0 then
TmpId[i]:=TreeView1.Items.Add(nil,TblOnvan[i])
else
TmpId[i]:=TreeView1.Items.AddChild(TmpId[TblValed[i]],TblOnvan[i]);

برخلاف تصور شماره item درخت شما اتونامبر نيست بلكه itemId مشخص كننده هر نود شماست

ببخشید یه کم گیج شدم. TblValed[i , TblOnvan[i] چی هستند؟؟؟ مگر آرایه نیستند؟؟؟ پس چرا فقط یک آرایه تعریف کنم؟؟؟؟

shpegah
یک شنبه 17 مرداد 1389, 12:53 عصر
ببخشید یه کم گیج شدم. TblValed[i , TblOnvan[i] چی هستند؟؟؟ مگر آرایه نیستند؟؟؟ پس چرا فقط یک آرایه تعریف کنم؟؟؟؟

دوست عزيز شما گفتيد جدولي داريد شامل سه فيلد حالا اين جدول ميتواند آرايه باشد ميتواند وصل به يك بانك باشد هرطور كه شما نياز داريد من آرايه گرفتم شما ميتوانيد به جدول خودتان وصل كنيد وروي آن حركت كنيد منظور از TblOnvan همان Onvan در جدول شماست ومنظور از TblValed همان Valed است

arshad89
یک شنبه 17 مرداد 1389, 13:02 عصر
دوست عزيز شما گفتيد جدولي داريد شامل سه فيلد حالا اين جدول ميتواند آرايه باشد ميتواند وصل به يك بانك باشد هرطور كه شما نياز داريد من آرايه گرفتم شما ميتوانيد به جدول خودتان وصل كنيد وروي آن حركت كنيد منظور از TblOnvan همان Onvan در جدول شماست ومنظور از TblValed همان Valed است


ممنون از پیگیری مشکل من.
یعنی در کد خودم فقط کافیه که id را به صورت آرایه تعریف کنم.درسته؟؟؟
id جدول پس ربطی به کد ما نداره.درسته؟؟؟

arshad89
یک شنبه 17 مرداد 1389, 22:13 عصر
درست نشده:عصبانی++:یعنی برای مثالی که گفتم درسته ولی اگر بدون ترتیب خاصی دوباره رکورد اضافه کنم باز مشکل دارد.آخه یکی نیست کمک کنه کدم درست بشه؟؟؟

arshad89
دوشنبه 18 مرداد 1389, 15:43 عصر
یکی کمک کنه لطفا:گریه:

shpegah
سه شنبه 19 مرداد 1389, 08:33 صبح
یعنی در کد خودم فقط کافیه که id را به صورت آرایه تعریف کنم.درسته؟؟؟
id جدول پس ربطی به کد ما نداره.درسته؟؟؟

نه دوست عزيز id جدول شما انديس آرايه را مشخص ميكند شما براي اينكه والد نودتان را گم نكنيد بايد نود را در آرايه ذخيره كنيد نه انديس را . توصيه ميكنم اگر برايتان يادگيري قضيه مهم است مشكلتان را باكمي تريس كردن حل كنيد تامتوجه شويد چه اتفاقهايي مي افتد وگرنه كدتان را بفرستيد برايتان درست ميكنم