PDA

View Full Version : پیدا کردن نام parent در Treeview نیاز فوری



msoleiman
دوشنبه 31 فروردین 1388, 21:22 عصر
با سلام
یک Treeview در برنامه دارم که ممکن است چند تا Parent داشته باشه و هریک از این Parent ها چند تا Child حالامن میخواهم که اطلاعات آن را در دیتابیس ذخیره کنم .
به این صورت که اطلاعات پرنت ها در یک جدول و اطلاعات Child ها در جدول دیگر البته به ترتیب یعنی ابتدا Parent1 و بعد Child های همین parent و یعد Parent2 و بعد Childهای parent2 و به همین ترتیب.
خواهش می کنم من را یاری کنید .

ghabil
دوشنبه 31 فروردین 1388, 23:13 عصر
یک Treeview در برنامه دارم که ممکن است چند تا Parent داشته باشه

یعنی چی ؟! اگر میخوای جواب درست و کامل بگیری سوالت رو درست و کامل و با مثال مطرح کن.

merced
دوشنبه 31 فروردین 1388, 23:43 عصر
اگه تو رويداد OnChange مي نويسي ::‌ منظورت اينه ؟؟ پيدا كردن مسير انتخاب شده؟



procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var x : String ;

begin
x := '/' ;
while Node <> nil do begin
x := TreeView1.Selected.Text + '/' + x ;

Node := Node.Parent ;
end ;
Caption := x ;


end;

msoleiman
سه شنبه 01 اردیبهشت 1388, 08:48 صبح
سلام ممنون از این که پاسخ دادید ولی من سئوالم به این صورت است : که من میخواهم در تری ویو که به طور مثال دارای 3 تا Parent است که هریک از این Parent ها 3 تا child دارند . با زدن کلید ذخیره از ابتدای treeview شروع کند و ابتدا نام Parent1 را در دیتابیس ذخیره کند و سپس به سراغ Child های آن Parent رفته و آنهارا در یک جدول دیگر ذخیره کند . سپس کار این Parent و Child های این Parent که تمام شد به سراغ Parent بعدی برود و به همین صورت تا انتهای Tree .
عمل ذخیره سازی Parent و Child های مربوط به هم بایستی به صورت پیوسته انجام شود یعنی به این صورت نباشد که همه Parent ها به داخل دیتابیس ذخیره شود . اول Parent1 و بعد Childهای آن Parent و بعد Parent بعدی.

MSHService
سه شنبه 01 اردیبهشت 1388, 11:54 صبح
سلام
سوال:
1- چرا میخواهی داخله دیتابیس ذخیره کنی؟
چرا از Save To File استفاده نمیکنی؟

2- هر زیر گروهت فقط Childه یا خودش میتونه پدر نیز باشه؟ یعنی فرزندان میتونند خودشون پدر نیز باشند؟



for i:=0 to TV1.item.count-1 do
begin
//شرط پدر بودن
showessage(TV1.items.item[i].text);
End;

بچه ها هم که طریقه پیدا کردن پدر رو هم تو تاپیک قبل لهت گفته بودن
موفق باشید.

merced
سه شنبه 01 اردیبهشت 1388, 12:42 عصر
سلام ممنون از این که پاسخ دادید ولی من سئوالم به این صورت است : که من میخواهم در تری ویو که به طور مثال دارای 3 تا Parent است که هریک از این Parent ها 3 تا child دارند . با زدن کلید ذخیره از ابتدای treeview شروع کند و ابتدا نام Parent1 را در دیتابیس ذخیره کند و سپس به سراغ Child های آن Parent رفته و آنهارا در یک جدول دیگر ذخیره کند . سپس کار این Parent و Child های این Parent که تمام شد به سراغ Parent بعدی برود و به همین صورت تا انتهای Tree .
عمل ذخیره سازی Parent و Child های مربوط به هم بایستی به صورت پیوسته انجام شود یعنی به این صورت نباشد که همه Parent ها به داخل دیتابیس ذخیره شود . اول Parent1 و بعد Childهای آن Parent و بعد Parent بعدی.



احتمالاً منظورت از 3 تا Parent اينه كه سه تا Node‌در Root داري

بهتره برعكس كار كني . يعني اگه اطلاعات پيش فرضي وجود داره دستي وارد بانك اطلاعاتي كني
بعد براي نمايش از بانك بخوني.
اگه كاربر خواست جديد وارد كنه . اول تو بانك در محل مناسب ذخيره كني و دوباره tree‌رو باز سازي كني

shervin farzin
سه شنبه 01 اردیبهشت 1388, 13:01 عصر
سلام
اينطور كه من متوجه شدم درختي كه شما در TreeView داريد ، 2 سطح بيشتر نداره . سطح
Parent و سطح Child . براي پيمايش درخت به ترتيبي كه خواسته بوديد ، ميتونيد از الگوريتم
زير استفاده كنيد :

var
i,Counter,Root_index:integer;
begin
Root_index:=0;
Counter:=TreeView1.Items.Count;
while Counter <> 0 do
begin
// Store parent in parent table
ListBox1.Items.Add(TreeView1.Items[Root_index].Text);
for i := 1 to TreeView1.Items[Root_index].Count do
begin
// Store parent's child in child table
ListBox1.Items.Add(TreeView1.Items[i+Root_index].Text);
Dec(Counter);
end;
Root_index:=Root_index+TreeView1.Items[Root_index].Count+1;
Dec(Counter);
end;

در اين كد من به جاي ذخيره Parent و Child در Table ، اونها رو به ترتيب پيمايش شده در يك
ListBox قرار دادم كه كد هاي ذخيره كردن شما در Database به جاي اين خط ها بايد قرار بگيرند.
يه نكته ديگه : با استفاده از روش id , p_id ميتونيد تمام گره هاي درخت رو در يك Table ذخيره
كنيد و ازش بعدا بازيابي كنيد . اگر در برنامتون مجبور به تفكيك گره ها نيستيد ، پيشنهاد ميكنم
از اين روش استفاده كنيد .
موفق باشيد .