Permitir Edição e proibir INSERT no DBGrid
Como fazer para Permitir Edição e proibir INSERT no DBGrid. Se coloco Edição = TRuE o DBGrid permiti edição das células, mas também permiti a inserção de novas linhas/records!
Quero impedir novas linhas e permitir a reedição das células!
Quero impedir novas linhas e permitir a reedição das células!
Dogu
Curtidas 0
Respostas
Marco Salles
14/10/2009
A Edição ja é default
A Inserção vc enibe gerando uma Exceção no BeforeInsert do controle
DataWare Associado
A Inserção vc enibe gerando uma Exceção no BeforeInsert do controle
DataWare Associado
GOSTEI 0
Dogu
14/10/2009
Karamba!! Já estou perdendo a paciência com este Delphi. É tanta coisinha aqui, coisinha ali e nunca ficamos sabendo de tudo que é preciso!
Ah se eu pudesse aplicar Ruby on Rails neste trabalho, ah se eu pudesse!
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
Afarias
14/10/2009
|raise Exception.Create(´Operação não permitida!´);
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+
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
Lehapan
14/10/2009
Caro Dogu, tenha paciência, pois não será da noite para o dia que você irá dominar uma linguagem de programação.
Abaixo segue o código:
Espero ter ajudado.
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
Marco Salles
14/10/2009
[b:12044cce68]lehapan [/b:12044cce68], muito mais indicado a exceção com raise ou com abort
e pareceque o Dogu ja captou isto
para que complicar algo simples ???? com ifs e cases e multiplos eventos ???
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
Dogu
14/10/2009
Sim meus amigos, a dica deu certo e vou aproveitar a dica do Abort também!
GOSTEI 0