ورود

View Full Version : انتخاب چند ركورد از دي بي گريد با استفاده از اديت



tikzahraaran
سه شنبه 10 دی 1387, 16:45 عصر
با سلام خدمت دوستان گرامي
و با عرض شرمندگي از مزاحمتهاي هميشگي براي دوستان
سوال من اين است آيا ميشه در يك اديت عددهايي را كه وارد مي كنيم و اين عدد ها را با جداكننده " ، " از هم جدا كنيم بتوان ركوردهاي شامل اين عددها را انتخاب كرد( مولتي سلكشن )
مثلا من چند ركورد دارم كه شماره آنها از 5 تا 40 است و من مي خواهم ركوردهايي كه شماره آنها مثلا 6و8و12و23 است را در يك اديت بنويسم و اين ركوردها انتخاب شوند
با تشكر

shervin farzin
سه شنبه 10 دی 1387, 22:33 عصر
سلام
براي اين كار ابتدا ليستي از اعدادي كه كاربر در Edit1 وارد كرده رو درون متغييري از نوع
Stringlist ذخيره ميكنيم . اين كار به كمك تابعي به نام Fill_list انجام ميشه كه در ادامه تعريف
خواهد شد . پس در قسمت Public فرم مينويسيم :

tmp:TStringList;
Procedure Fill_list(x:string);

تابع Fill_list به شكل زير تعريف ميشه :

procedure TForm1.Fill_list(x: string);
var
i,j:integer;
begin
tmp:=TStringList.Create;
j:=1;
for i := 1 to length(x) do
begin
if copy(x,i,1) = ',' then
begin
tmp.Add(copy(x,j,i-j));
j:=i+1;
end;
end;
tmp.Add(copy(x,j,i-j));
end;

حالا روي دكمه اي در فرم كد نهايي رو مينويسيم :

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
dbGrid1.SelectedRows.Clear;
Fill_list(edit1.Text);
for i := 0 to tmp.Count-1 do
begin
ADOQuery1.RecNo:=strtoint(tmp.Strings[i]);
dbGrid1.SelectedRows.CurrentRowSelected := True;
end;
end;

در ضمن به اين نكته هم توجه كنيد كه در هر لحظه شما فقط امكان انتخاب يك ركورد در Dataset
رو داريد . Highlight شدن چندين سطر از DBGrid فقط جنبه نمايشي داره و در واقع آخرين عددي كه
در ليست درج شده موقعيت واقعي در Dataset رو نشون ميده .
موفق باشيد .

tikzahraaran
چهارشنبه 11 دی 1387, 21:23 عصر
shervin farzin (http://barnamenevis.org/forum/member.php?u=71100) عزيز سلام
ضمن تشكر و قدرداني فراوان از زحمات شما مي خواستم بپرسم منظورتون از اينكه فقط آخرين ركورد، انتخاب شده واقعي است اينه كه اگه ما ركوردهاي سلكت شده را بخواهيم با هم منتقل كنيم فقط ركورد آخر منتقل مي شود ؟
متشكرم

shervin farzin
چهارشنبه 11 دی 1387, 23:47 عصر
سلام
بله همينطوره كه مي فرماييد .
اطلاعاتي كه توسط دستور Select برگردونده ميشه و درون Grid نمايش داده ميشه داخل
محيطي قرار داره به نام Dataset . در اين محيط يك اشاره گر هم هست كه در هر لحظه ميتونه
فقط به يك ركورد اشاره كنه . اگه شما ركورد شماره 4 رو انتخاب كنيد ، اشاره گر به ركورد 4 اشاره
ميكنه . اگه بعدش ركورد شماره 9 رو انتخاب كنيد اشاره گر از ركورد 4 به ركورد 9 منتقل ميشه و به
خودي خود راهي نداره كه متوجه بشيد اين اشاره گر قبل از ركورد 9 ، به چه ركوردي اشاره مي كرده
مگر اين كه به يه ترتيبي ، ردپايي از اين اشاره گر رو خودتون ذخيره كنيد . مثلا با هر بار انتخاب يك
ركورد در Grid ، شماره اون ركورد وارد يك آرايه بشه . بعد يه حلقه For كه به اندازه مقادير درون آرايه
تكرار ميشه ، تشكيل بديد و داخل اينFor اون فرايند انتقالي رو كه مورد نظرتون هست ، براي تك تك
ركوردها اجراء كنيد .
موفق باشيد .