Fórum Permitir Edição e proibir INSERT no DBGrid #375978
14/10/2009
0
Quero impedir novas linhas e permitir a reedição das células!
Dogu
Curtir tópico
+ 0Posts
14/10/2009
Marco Salles
A Inserção vc enibe gerando uma Exceção no BeforeInsert do controle
DataWare Associado
Gostei + 0
14/10/2009
Dogu
Ah se eu pudesse aplicar Ruby on Rails neste trabalho, ah se eu pudesse!
procedure TDataModule1.cdsHorariosBeforeInsert(DataSet: TDataSet); begin if cdsHorarios.RecordCount = 6 then raise Exception.Create(´Operação não permitida!´); end;
Gostei + 0
14/10/2009
Afarias
vc pode usar Abort para impedir de forma silenciosa.
|Ruby on Rails neste trabalho, ah se eu pudesse!
Adoro Ruby.
Não se desespere, se estudar um pouco de Delphi como fez com o Ruby vai dominá-lo tb. No começo tudo parece complicado, mas verá q é muito simples.
T+
Gostei + 0
15/10/2009
Lehapan
Abaixo segue o código:
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;
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;
procedure Tform.dbgrQueryKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
{ Para não deixar apagar o registro }
if Key = VK_DELETE then
Key := VK_NONAME
;
Key := NaoInsereDBGrid( TDBGrid(Sender), TDBGrid(Sender).DataSource.DataSet, Key );
end;Espero ter ajudado.
Gostei + 0
15/10/2009
Marco Salles
e pareceque o Dogu ja captou isto
procedure TDataModule1.cdsHorariosBeforeInsert(DataSet: TDataSet); begin if cdsHorarios.RecordCount = 6 then raise Exception.Create(´Operação não permitida!´); end;
para que complicar algo simples ???? com ifs e cases e multiplos eventos ???
Gostei + 0
15/10/2009
Dogu
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)