Ir para conteúdo
Fórum Script Brasil
  • 0

Linha do Dbgrid


Guest --Rodrigo --

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

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Linha do DBGrid

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,

Rodrigo

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

Link para o comentário
Compartilhar em outros sites

  • 0
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 tabela

No DbGrid não é possvel mas se usar o stringgrid é possivel fazer o que voce esta querendo

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
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 tabela

Rodrigo, 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 querendo
Jhonas, 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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...