Guest --Rodrigo -- Postado Janeiro 10, 2008 Denunciar Share Postado Janeiro 10, 2008 Bom dia a todos.No meu DBGrid cabe 13 linhas, gostaria de saber se alguém sabe como retornar em qual linha foi clicado.Ex. Foi clicado na Linha 7. Retornar 7. Foi clicado na linha 10. Retornar 10.para saber a coluna é DBGrid1.SelectedIndex.Agora para retornar o numero da linha?Se alguém puder ajudar ...AgradecidoRodrigo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Janeiro 10, 2008 Denunciar Share Postado Janeiro 10, 2008 Rodrigo .. o codigo para isto unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Db, DBTables, Grids, DBGrids; type TForm1 = class(TForm) DBGrid1: TDBGrid; Query1: TQuery; DataSource1: TDataSource; Label1: TLabel; procedure DBGrid1CellClick(Column: TColumn); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.DBGrid1CellClick(Column: TColumn); begin // mostra o numero da linha onde esta o cursor Label1.caption := inttostr(DBGrid1.DataSource.DataSet.RecNo); end; end.abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Linha do DBGrid Postado Janeiro 11, 2008 Denunciar Share Postado Janeiro 11, 2008 Bom dia Jhonas,Não sei se me expressei bem...Dessa forma poderia verificar com o Table.RecNo;O que eu quero mesmo é saber em qual linha está posicionado dentro do dbgrid, que no meu caso vai até no maximo 13 linhas.Atenciosamente,RodrigoRodrigo .. o codigo para isto unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Db, DBTables, Grids, DBGrids; type TForm1 = class(TForm) DBGrid1: TDBGrid; Query1: TQuery; DataSource1: TDataSource; Label1: TLabel; procedure DBGrid1CellClick(Column: TColumn); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.DBGrid1CellClick(Column: TColumn); begin // mostra o numero da linha onde esta o cursor Label1.caption := inttostr(DBGrid1.DataSource.DataSet.RecNo); end; end.abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Janeiro 11, 2008 Denunciar Share Postado Janeiro 11, 2008 Dessa forma poderia verificar com o Table.RecNo;O que eu quero mesmo é saber em qual linha está posicionado dentro do dbgrid, que no meu caso vai até no maximo 13 linhas.colega.. mesmo que voce tenha limitado a visualização do dbgrid em 13 linhas, ao usar a barra de rolagem, a posição do registro muda... então voce não vai ter sempre a linha 1 como sendo o registro 1, mas na linha 1 visualizada no dbgrid pode estar o registro 2 ou 3 ou 5, ou 10.... etc... a linha do dbgrid reflete a linha do registro na tabelaNo DbGrid não é possvel mas se usar o stringgrid é possivel fazer o que voce esta querendoabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 14, 2008 Denunciar Share Postado Janeiro 14, 2008 Dessa forma poderia verificar com o Table.RecNo;O que eu quero mesmo é saber em qual linha está posicionado dentro do dbgrid, que no meu caso vai até no maximo 13 linhas.colega.. mesmo que voce tenha limitado a visualização do dbgrid em 13 linhas, ao usar a barra de rolagem, a posição do registro muda... então voce não vai ter sempre a linha 1 como sendo o registro 1, mas na linha 1 visualizada no dbgrid pode estar o registro 2 ou 3 ou 5, ou 10.... etc... a linha do dbgrid reflete a linha do registro na tabelaRodrigo, isto que o Jhonas está colocando é real.Você deve ter isto em mente quando pensa no posicionamento linha/coluna em um TDBGrid.No DbGrid não é possvel mas se usar o stringgrid é possivel fazer o que voce esta querendoJhonas, na verdade tem um meio sim (mesmo que a informação não seja a esperada, como você já citou ao colega Rogerio).A idéia básica é que você define na sua unit, uma classe descendente de TDBGrid e nela exporta as propriedades Col e Row que estão protegidas (sessão protected da classe) na classe ancestral TCustomGrid. (não lembro se isto já foi mostrado por aqui antes :unsure:)Rodrigo, Implementando a codificação abaixo, você observará a diferença entre uma abordagem e outra. Talvez você compreenda melhor a que o Jhonas se referiu em sua observação. Coloque dois labels no form e experimente ele com um grid que mostre menos linhas do que a que há no dataset e você entenderá (ex. dataset com 8 registros e grid mostra 5 linhas).unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, DB, Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls; type // declaração da nossa classe para exportação de propriedades protegidas TDBGridExtended = class(TDBGrid) published property Col; property Row; end; TForm1 = class(TForm) DBGrid1: TDBGrid; ... end; implementation ... procedure TForm1.DBGrid1CellClick(Column: TColumn); begin // utilizando o número do registro como linha e o índice de Column como coluna Label1.Caption := Format('Linha: %d Coluna: %d', [DBGrid1.DataSource.DataSet.RecNo, Column.Index +1]); // utilizando a posição no grid visível. Row como linha e Col como coluna Label2.Caption := Format('Linha: %d Coluna: %d', [TDBGridExtended(DBGrid1).Row, TDBGridExtended(DBGrid1).Col]); end; procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key in [VK_LEFT, VK_RIGHT, VK_HOME, VK_END] then DBGrid1CellClick(DBGrid1.Columns[DBGrid1.SelectedIndex]); end; procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); begin DBGrid1CellClick(DBGrid1.Columns[DBGrid1.SelectedIndex]); end; end.Uma observação, quanto a questão do posicionamento, é que não dá para considerar apenas o evento OnCellClick, já que o usuário pode movimentar-se utilizando o teclado, por isto a implementação do evento OnKeyUp. Inclusive deve ser no UP e não do DOWN da tecla, pois o índice da coluna ainda não estaria atualizado. Mas, utilizar os dois métodos ainda não seria suficiente, porque o usuário poderia utilizar a barra de rolagem vertical, motivo pelo qual utilizei o evento OnDataChange do DataSource associado ao DBGrid. Devido ao uso deste evento, que gerará a atualização pela movimentação entre as linhas, é que o código no evento do teclado foi otimizado de modo a verificar apenas a movimentação vertical.Bom, ficou de fora a movimentação pela barra vertical, mas como sua utilização não resulta na mudança de coluna, acho que não temos que nos preocupar com ela.Qualquer dúvida...Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest --Rodrigo --
Bom dia a todos.
No meu DBGrid cabe 13 linhas, gostaria de saber se alguém sabe como retornar em qual linha foi clicado.
Ex. Foi clicado na Linha 7. Retornar 7.
Foi clicado na linha 10. Retornar 10.
para saber a coluna é DBGrid1.SelectedIndex.
Agora para retornar o numero da linha?
Se alguém puder ajudar ...
Agradecido
Rodrigo
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.