PDA

View Full Version : آموزش: حلقه رو دی بی گرید (هنگام حذف داده، ارسال، چاپ ..)



یوسف زالی
دوشنبه 08 مهر 1392, 12:49 عصر
سلام.
خیلی پیش میاد که لازم داریم بصورت مولتی سلکت داده هایی رو از گرید انتخاب کرده و یک بلایی سرشون بیاریم.
کد های مرتبط بهش خیلی ساده هست ولی نیاز داره که هی همه جا کپی پیست بشن.
امروز برای کاری این کد رو نوشتم، براتون می گذارم که شما هم استفاده کنید:



procedure LoopActionOnDBGrid(DBGrid: TDBGrid; Action: TNotifyEvent; Sender: TObject = nil; ExtraLoopCondition: boolean = true);
var
i: integer;
Loop: boolean;
DS: TDataSet;
OldEnableState: boolean;
begin
if not Assigned(Action) then
Exit;

if not Assigned(DBGrid) then
Exit;

if not Assigned(DBGrid.DataSource) then
Exit;

if not Assigned(DBGrid.DataSource.DataSet) then
Exit;

DS := DBGrid.DataSource.DataSet;

if DS.RecordCount = 0 then
Exit;

if not Assigned(Sender) then
Sender := DBGrid;

OldEnableState := not DS.ControlsDisabled;
DS.DisableControls;

Loop := (DBGrid.SelectedRows.Count > 0) and ExtraLoopCondition;

for i := 0 to integer(Loop) * (DBGrid.SelectedRows.Count -1) do
begin
if Loop then
DS.Bookmark := DBGrid.SelectedRows[i];

Action(Sender);
end;

if OldEnableState then
DS.EnableControls;
end;


روش کار به این صورته:
یک متد تعریف می کنید که کاری که می خواهید بصورت حلقه (یا حتی تکی) انجام بشه، مثل حذف یا ... در اون متد می نویسید.
بعد در دکمه پروسیجر بالا رو کال می کنید.

مثال:


procedure TForm1.Proc(Sender: TObject);
begin
ShowMessage(ADOTable1SSN.AsString);
// or delete data from current row
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
LoopActionOnDBGrid(DBGrid1, Proc);
end;


:چشمک:

پارامترهای اضافی هم گویای خودش هست.
حالات مولتی سکلت، و غیر مولتی سکلت، انتخاب نشده و انتخاب شده رو هم می فهمه.

یوسف زالی
دوشنبه 08 مهر 1392, 20:34 عصر
پست اسپم :ناراحت: :

50 60 تا بازدید، چقدر دلگرمی!

persia_hrn
سه شنبه 09 مهر 1392, 12:39 عصر
داداش یوسف جواهری به خدا
به نظر میاد کسایی که میان توی این فروم بیشتر دنبال جواب سوال های خودشونن تا کسب اطلاعات جدید ، البته مثل شما هم اساتیدی هستن که گنجینه ی اطلاعاتشون رو به اشتراک میذارن .
شما همیشه کارت درست داداش .
اگه شما ها نبودید باید رو میزدیم به اجنبی ها ، خدا حفظتون کنه . :تشویق: :قلب: