Delphi DBGrid

9 отговора 493 прегледа
#1

Delphi DBGrid

Работя с TTable (Paradox) и DBGrid.
Когато съм на последния ред и натисна "стрелка надолу" ми се отваря нов ред за добавяне на запис след последния, а аз не искам това.
Не мога да дам ReadOnly=true в Options, защото редактитам данните директно в DBGrid.
Опитах се да използувам OnKeyUp и OnKeyDown, но не се получава добре.
Ще се радвам да получа съвет как да се справя с този проблем.

Отговор
в отговор на Ada #2

Re: Delphi DBGrid

Някои гридове (например DBGridEh) си имат пропърти дали да може да се прави това. Ако си с някакъв такъв грид - виж дали има. Ако използваш делфийския TDBGrid най-добре ще е да си напишеш обработчик на BeforeInsert събитието на таблицата ти. Вътре викни Abort. Това ще ти попречи и програмно да добавяш записи, така че ако това ти е необходимо добави и някакъв флаг, който да разрешава/забранява добавянето и си го управлявай при програмно добавяне на записи.

Честита Баба Марта на всички!

Отговор
в отговор на Ada #3

Re: Delphi DBGrid

Ами tTbale (tDataSet) има маса събития, като например BeforInsert. Ако някъде там кажеш Cancel може би ще стане.
Пфу, реших да го пробвам - оказа се най-подходящо в OnNewRecord:
procedure TForm1.Table1NewRecord(DataSet: TDataSet);
begin
Table1.cancel;
//Table1.Prior;
//Table1.Prior;
//Table1.Last;
end;

Отговор
в отговор на andrew_nikoloff #4

Честита Баба Марта и на теб!

Що не бачкаш, ами ми изпреварваш постовете?


Отговор
в отговор на NikB #5

Виноват, другарю капитан!



Отговор
в отговор на NikB #6

Re: Delphi DBGrid

Така правиш нов record и веднага го отказваш.
По добре е BeforeInsert да се направи Abort; - така операцията нов запис се отказва преди да е извършена.

Отговор
в отговор на Formal #7

Re: Delphi DBGrid

Стори ми се, че ако е в бефоринсерт се допуска преминаване на долния ред, въпреки, че не позволява да се въвежда (клавиатурата пука:)
Може и да бъркам.

Отговор
в отговор на Ada #8

Re: Delphi DBGrid

{......stop the DBGrid control from auto-appending a new entry?

(Q: How to stop the dbgrid control from auto-appending a new entry when you move down after the last record in a table.
It creates a new blank line / record in the table. Can this be stopped?}

{A: Add to your TTables's "BeforeInsert" event the following line:}

procedure TForm1.Tbable1BeforeInsert(DataSet: TDataSet);
begin
Abort; {<<---this line}
end;


{A: It traps the down key and checks for end-of-file.}

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_DOWN) then
begin
TTable1.DisableControls;
TTable1Next;
if TTable1.EOF then
Key := 0
else
TTable1.Prior;
TTable1.EnableControls;
end;
end;


AJ™
Отговор
в отговор на NikB #9

Re: Delphi DBGrid

Благодаря!
Използувах идеята по малко по-различен начин:

procedure TFORM1.DataSource1StateChange(Sender: TObject);
begin
if (Table1.State=dsInsert) then Table1.Cancel; {DataSource1.DataSet=Table1}
end;

а където добавям запис:
Table1.DisableControls; Table1.Append; Table1.EnableControls;

Работи перфектно.

Отговор
в отговор на AJ™ #10

Re: Delphi DBGrid

Малко тежичка артилерия. Ако се използува невнимателно премахва не само това, което искам, но и което не искам. Но със сътоветните флагове и с прецизиране на Events става.

Отговор