PDA

View Full Version : tree view متصل به بانک (چنین چیزی تو سایت نیست)



Site Admin
جمعه 16 دی 1390, 18:43 عصر
با سلام من این تاپیک رو ایجاد کردم که با نظر دوستان بتوانم treeview را به بانک اطلاعاتی متصل و اطلاعات را در درخت درج ، ویرایش و حذف کنم
(این درخت تا بی نهایت سطح میتواند پیش برود)با اینکه نمونه های رو دوستان پیشنهاد دادن ولی من خودم این کار رو انجام دادم قبلا با سی شارپ کدشو نوشته بودم و به دلفی تبدیلش کردم الب
این کار رو خودم انجام دادمته کامل بهینه نشده ولی کار رو راه میندازه
دیتابیس sql
delphi7

جدول بانک

CREATE TABLE [dbo].[tbl_tree] (
[t_id] smallint IDENTITY(1, 1) NOT NULL,
[t_name] nvarchar(100) COLLATE Arabic_CI_AS NOT NULL,
[level] tinyint DEFAULT 0 NULL,
[child] smallint NULL,
PRIMARY KEY CLUSTERED ([t_id]),
UNIQUE ([t_name])
)
ON [PRIMARY]
GO


کد استور پروسیجر درج گزینه جدید در بانک


CREATE PROCEDURE dbo.insert_node_tree(@masterid smallint,@txt nvarchar(150))
AS
BEGIN
if(@masterid=0)
begin
insert into tbl_tree(t_name,LEVEL,child)VALUES(@txt,0,0)
return 0
end
insert into tbl_tree(t_name,LEVEL,child)VALUES(@txt,(SELECT tbl_tree.[level]
FROM tbl_tree
WHERE (tbl_tree.t_id=@masterid))+1,@masterid)
END


نمونه سورس و فایل اجرایی برنامه ( توجه داشته باشید که در ابتدا connection string مربوط به ado connection را تنظیم کنید
دانلود (http://barnamenevis.org/attachment.php?attachmentid=80635&stc=1&d=1326360929)

fire.angle
شنبه 17 دی 1390, 19:05 عصر
سلام
این کدی که قرار دادم کاری رو که میخوای برات انجام میده
فقط توجه داشته باش که این کد ها رو من برای برنامه خودم اینطوری نوشتم و شما میتونی هر جا شو که نخواستی حذف کنی و یا تغییر بدی
اما در کل همون کاری رو که میخوای انجام میده یعنی با اطلاعاتی کهه از بانک میخونه TreeView رو پر میکنه

var i,j,k,cnt,Tedad,c,l:Byte;
ArrG,ArrK:array of String;
s:String;
begin
with Q_Hesab do
begin
Close; SQL.Clear;
SQL.Add('Select * from GroupHesab');
Open;
SetLength(ArrG,RecordCount);
i:=0;
while not Eof do
begin
TreeHesab.Items.Add(nil,Q_Hesab.Fields[1].AsString);
ArrG[i]:=Q_Hesab.Fields[1].AsString;
i:=i+1;
Q_Hesab.Next;
end;
cnt:=0; j:=0; k:=0; Tedad:=0;
For i:=1 to length(ArrG) do
begin
Close; SQL.Clear;
SQL.Add('Select * From KolHesab K');
SQL.Add('inner join GroupHesab G on K.CodeGroup=G.CodeGroup');
SQL.Add('where G.DesGroup='+QuotedStr(ArrG[cnt]));
s:=ArrG[cnt];
cnt:=cnt+1;
Open; k:=0;
Tedad:=Tedad + RecordCount;
while not Eof do
begin
TreeHesab.Items.AddChild(TreeHesab.Items[j],Q_Hesab.Fields[2].AsString);
s:=TreeHesab.Items[j].Text ;
k:=k+1;
Q_Hesab.Next;
end;
j:=j+1+k;
end;
SetLength(ArrK,Tedad); cnt:=0; c:=0;
For i:=1 to length(ArrG) do
begin
Close; SQL.Clear;
SQL.Add('Select * From KolHesab K');
SQL.Add('inner join GroupHesab G on K.CodeGroup=G.CodeGroup');
SQL.Add('where G.DesGroup='+QuotedStr(ArrG[cnt]));
cnt:=cnt+1;
Open;
while not Eof do
begin
ArrK[c]:=Q_Hesab.Fields[2].asString;
c:=c+1;
Q_Hesab.Next;
end;
end;
cnt:=0; j:=0; k:=0;
k:=Length(ArrK);
for i:=1 to Length(ArrK) do
begin
Close; SQL.Clear;
SQL.Add('Select M.DesMoin From KolHesab k');
SQL.Add('inner join MoinHesab M on k.CodeKol=M.CodeKol');
SQL.Add('where K.DesKol='+QuotedStr(Arrk[cnt]));
s:=Arrk[cnt];
Open;
for l:=0 to TreeHesab.Items.Count-1 do
begin
s:=ArrK[cnt];
if (TreeHesab.Items[l].Text=ArrK[cnt]) then
begin
j:=l;
Break;
end;
end;
cnt:=cnt+1;
while not Eof do
begin
TreeHesab.Items.AddChild(TreeHesab.Items[j],Q_Hesab.Fields[0].AsString);
s:=TreeHesab.Items[j].Text ;
k:=k+1;
Q_Hesab.Next;
end;
end;
end;
///////////////////
SetWinControlBiDi(TreeHesab);
TreeHesab.Refresh;

mohsen24000
شنبه 17 دی 1390, 21:21 عصر
با کد زیر که نوشتم میتونید اطلاعات موجود در بانک را داخل یک tree درج کنید:


procedure TForm1.CreateTree(tree:TElTree;node:TElTreeItem;co de:integer);
var i:integer;
list1,list2:Tstringlist;
newnode:TElTreeItem;
begin
list1:=Tstringlist.Create;
list2:=Tstringlist.Create;
dbtree.Filtered:=true;
dbtree.filter:='parentid='+inttostr(code);
while not dbtree.eof do
begin
list1.Add(dbtree.fieldbyname('title_f').asstring);
list2.Add(dbtree.fieldbyname('nodeid').asstring);
dbtree.next;
end;
dbtree.Filtered:=false;
for i:=0 to list1.count-1 do
begin
newnode:=tree.Items.AddChild(node,list1.strings[i]);
newnode.tag:=strtoint(list2.Strings[i]);
application.ProcessMessages;
CreateTree(tree,newnode,strtoint(list2.strings[i]));
end;
list1.free;
list2.free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
tree.Items.Clear;
CreateTree(tree,nil,-1);
tree.FullExpand;
messagedlg('ساخت درخت به اتمام رسيد',mtinformation,[mbok],0);
end;

Site Admin
شنبه 17 دی 1390, 22:37 عصر
با تشکر از دوست گرامی من در سئوال گفته بودم که تا n سطح ولی گویا شما یک جدول اصلی و یک جدول فرعی دارید میشه دو سطح
n سطح یعنی
اینجوری
1=کامپیوتر
1-1= نرم افزار
1-1-1=بازی
1-1-2=برنامه نویسی
1-1-2-1=تحت وب
و ...
به این عکس یه نگاه بنداز خودم با سی شارپ نوشتمش
80356

parsidev
شنبه 17 دی 1390, 23:07 عصر
سلام
قدیما کرامتی بزرگ یه همچین کاری داشت می کرد!... می تونید یه پی ام براش بزنید ببنید چه بر سرش اومده...

mohsen24000
یک شنبه 18 دی 1390, 00:09 صبح
بنده با همین کد الان درختی دارم با بیش از 13هزار شاخه و تا 25 level و زیر شاخه که بعبارتی درخت حقوق ایران رو پیاده سازی کردم.

Site Admin
یک شنبه 18 دی 1390, 10:46 صبح
بنده با همین کد الان درختی دارم با بیش از 13هزار شاخه و تا 25 level و زیر شاخه که بعبارتی درخت حقوق ایران رو پیاده سازی کردم.

با تشکر من به کد ها دقت نکردم دیدم که دو جدول داری گفتم شاید دو سطحی کا کردی اگر لطف فیلدهای جدولت رو مشخص کنی ممنون میشم

mohsen24000
یک شنبه 18 دی 1390, 11:26 صبح
جدول از سه فیلد nodeid و parentid و title تشکیل شده است.
در ضمن کدها رو چند سال پیش نوشتم، شاید بشه بهینه تر نوشت!

sahha1
یک شنبه 23 بهمن 1390, 04:01 صبح
سلام
من هم میخوام همچین چیزی بنویسم البته با VB و Asp و پایگاه SQL راستش دارم سایت مینویسم و منوی سمت راستم کاملا درختی هست و میخوام از جدولم اطلاعات رو بگیرم و توی TreeVeiw نمایش بدم
البته من 1جدول دارم توی اون خبر اقتصادی، سیاسی و فرهنگی و ... که کدهاشون 1 و 2و 3 و .. هست و خبر اقتصادی ایران میشه 1-1 و خبر اقتصادی جهان 1-2 و .... و خبر اقتصادی ایران تهران میشه 1-1-1 و ...
برای همه زیر منوها هم همینجور کد اضافه میشه و در کل هر "-" نشون دهنده یک زیرمنو هست
حالا چجور ارتباط بدم treeview رو با پایگاهم و جدولم و ...
ممنون

hadisalahi2
سه شنبه 25 بهمن 1390, 17:36 عصر
این TElTreeItem مربوطه به چه یونیتی میشه.چون در برنامه من قابل شناسایی نیست

mohsen24000
سه شنبه 25 بهمن 1390, 18:28 عصر
این TElTreeItem مربوطه به چه یونیتی میشه.چون در برنامه من قابل شناسایی نیست
پکیج ElPack رو میتونید داخل داخل پکیج LMD پیدا کنید.

hadisalahi2
چهارشنبه 26 بهمن 1390, 16:37 عصر
این کنترل کلا جزود زیر مجموعه LMD هست؟

mohsen24000
چهارشنبه 26 بهمن 1390, 18:56 عصر
این کنترل کلا جزود زیر مجموعه LMD هست؟
تا یادمه سالهای قبل مستقل بود ولی اخیرا جزئی از LMD شده!