Bloquear Insert no Grid
23/02/2010
0
Felipe Ip
Post mais votado
23/02/2010
{ Retorna o índice da última coluna visível }
function RetIdxUltimaColVisivel(DBGrid: TDBGrid): integer;
var
x: integer;
begin
Result := -1;
for x := DBGrid.Columns.Count-1 downto 0 do
begin
if DBGrid.Columns.Items[x].Visible then
begin
Result := x;
Break;
end
;
end;
end;
function NaoInsereDBGrid(DBGrid: TDBGrid; DataSet: TDataSet; Key: Word): Word;
begin
{ Não deixa inserir registros no DBGrid caso:
1- estiver em modo de edição: E
1.1- se clicar na tecla "Insert"; OU
1.2- se clicar na tecla "Seta para baixo" E estiver no último registro; OU
1.2- se clicar na tecla "Tab" E estiver no último registro E estiver na
última coluna visível. }
Result := Key;
if dgEditing in DBGrid.Options then
begin
if ( Key = VK_INSERT )
or ( (Key = VK_DOWN) and (DataSet.RecNo = DataSet.RecordCount) ) then
Result := 0
else
if ( Key = VK_TAB ) and ( DataSet.RecNo = DataSet.RecordCount ) then
begin
if ( DBGrid.SelectedIndex = RetIdxUltimaColVisivel(DBGrid) ) then
Result := 0
;
end
;
end
;
end;
No evento OnKeyDown do DBGrid coloque o seguinte:
procedure dbgrPadraoKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
{ Não permite excluir }
if Key = VK_DELETE then
Key := VK_NONAME
;
{ Não permite incluir }
Key := NaoInsereDBGrid( TDBGrid(Sender), TDBGrid(Sender).DataSource.DataSet, Key );
end;
Espero ter colaborado.
Wilson Junior
Mais Posts
23/02/2010
Thiago Santana
23/02/2010
Emerson Nascimento
aproveitando o evento OnKeyDown do Paulista:
procedure dbgrPadraoKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
{ Não permite excluir }
if Key = VK_DELETE then
Key := VK_NONAME
;
end;
e, para não permitir a inclusão, implemente o evento OnNewRecord do dataset:
procedure TForm12.ClientDataSet1NewRecord(DataSet: TDataSet);
begin
DataSet.Cancel;
end;
23/02/2010
Wilson Junior
A sua opinião é de grande avalia quando utilizado ClientDataSet que nunca poderá ser incluído no mesmo. Mas em casos em que determinados momentos poderá ser incluído registros, não será possível utilizar deste modo, e além disto, se você estiver utilizando este mesmo ClientDataSet para outras coisas, no mesmo nunca poderá ser incluído registros também.
Lembrando, a resposta do Emerson está corretíssima, mas vale lembrar de alguns detalhes.
Espero ter colaborado.
Clique aqui para fazer login e interagir na Comunidade :)