GARANTIR DESCONTO

Fórum Como excluir uma linha do StringGrid ??? #287366

07/07/2005

0

Colegas..

Como fazer para excluir uma linha do StringGrid, assim como um registro do DBGrid?


Cabelo

Cabelo

Responder

Posts

08/07/2005

Cabelo

Sobe... :(


Responder

Gostei + 0

08/07/2005

Massuda

Como fazer para excluir uma linha do StringGrid...
Via de regra, você deve popular novamente o StringGrid excluindo a linha (mude o RowCount se for o caso); se for a última linha, não há necessidade de repopular o StringGrid.


Responder

Gostei + 0

08/07/2005

Cabelo

Isso é um grande problema.., eu imaginei e fiz assim.. mas... fica bem lento.., tenho uns 2000 registros por vez..

Mas me diga uma coisa.. pra que serve o método delete() do string grid?


Responder

Gostei + 0

08/07/2005

Massuda

...pra que serve o método delete() do string grid?
Não encontrei um método TStringGrid.Delete... tem certeza?

Uma alternativa, seria ajustar a altura da linha em zero, mas o resultado (esteticamente) pode não agradar.


Responder

Gostei + 0

11/07/2005

Cabelo

O método é da linha..


stringgrid1.rows[Nº da linha].delete...


a mensagem de erro que me consta é :

Não é possível inserir ou excluir linhas do string grid..

talvez seja um bug do delphi??

Pq se não for, porquê existe esse método?


Responder

Gostei + 0

11/07/2005

Massuda

stringgrid1.rows[Nº da linha].delete...
TStringGrid.Rows (assim como TStringGrid.Cols) é uma propriedade que retorna um TStrings de modo que você tem acesso ao texto em uma linha do grid através de uma lista; portanto, o texto em uma determinada posição dessa lista é o texto de uma das colunas (naquela linha). Você pode usar essa lista para alterar o conteúdo do grid.

O método Delete (e o método Insert) existe porque ele faz parte dos métodos de uma lista TStrings, mas, do modo como está implementado no StringGrid (classe TStringGridStrings na unit Grids), você não pode inserir ou deletar strings do grid através desse método (não sei o motivo, precisaria estudar o fonte).


Responder

Gostei + 0

11/07/2005

Cabelo

[quote:4168ec6250=´Cabelo´]stringgrid1.rows[Nº da linha].delete...
TStringGrid.Rows (assim como TStringGrid.Cols) é uma propriedade que retorna um TStrings de modo que você tem acesso ao texto em uma linha do grid através de uma lista; portanto, o texto em uma determinada posição dessa lista é o texto de uma das colunas (naquela linha). Você pode usar essa lista para alterar o conteúdo do grid.

O método Delete (e o método Insert) existe porque ele faz parte dos métodos de uma lista TStrings, mas, do modo como está implementado no StringGrid (classe TStringGridStrings na unit Grids), você não pode inserir ou deletar strings do grid através desse método (não sei o motivo, precisaria estudar o fonte).[/quote:4168ec6250]

Bug.. concorda????


Responder

Gostei + 0

12/07/2005

Orpolonio

vc tem q mover as linhas abaixo da selecionada para cima,,,,e 2000 registros n demora tanto assim.


Responder

Gostei + 0

12/07/2005

Cabelo

vc tem q mover as linhas abaixo da selecionada para cima,,,,e 2000 registros n demora tanto assim.


Colega..

se você tivesse lido todo o tópico saberia que isso que você propôs eu já faço..

mas acredito ser uma certa ´gambiarra´, por isso postei este tópico, para saber se exitiria uma outra forma de fazer isso, uma forma mais profissional. Fiz isto pois ví o método .delete() do TStrings, sendo usado depois do método Rows, e achei que deveria tentar investigar se dava ou não pra usar..

Ao que me parece a borland simplesmente usou a classe TStrings, herdando todos os seus métodos, mas não ´tratou´ o método .delete() e .insert(), no StringGrid, ou eu que não estou sabendo utilizar este método..


Responder

Gostei + 0

12/07/2005

Massuda

Ao que me parece a borland simplesmente usou a classe TStrings, herdando todos os seus métodos, mas não ´tratou´ o método .delete() e .insert(), no StringGrid...
Sim, é isso que aconteceu. Quem implementou o StringGrid decidiu que não teria Insert nem Delete.


Responder

Gostei + 0

12/07/2005

Márcio

Peguei um materia no forum e fiz umas alterações.

...
procedure gridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FrmNotaFiscal: TFrmNotaFiscal;
SelectRow,SelectCol:integer;
TextRow,TextRow1,Temp2:string;
Primeiro:boolean; //Variável para verificar se é a primeira inserção

type
TStringGridX = class(TStringGrid)
public
procedure MoveColumn(FromIndex, ToIndex: Longint); //Nos permite mover colunas
procedure MoveRow(FromIndex, ToIndex: Longint); //Nos permite mover linhas
end;

implementation

uses UDM, TFrm1;

{$R *.dfm}

procedure TStringGridX.MoveColumn(FromIndex, ToIndex: Integer); // essa não sei o que faz
begin
inherited;
end;

procedure TStringGridX.MoveRow(FromIndex, ToIndex: Integer);// essa tb não sei o que faz
begin
inherited;
end;

Procedure DeletaLinha(Grid:TStringGrid); {*}
var i:integer;
SelectRow, SelectCol : integer;
begin
SelectRow := grid.Row; {*}
SelectCol := grid.Col; {*}
if Grid.RowCount > 2 then //Se o StringGrid possuir mais de uma linha
begin
for i:=0 to Grid.ColCount do {*}
Grid.Cells[i,SelectRow]:=´´; {*}
TStringGridX(Grid).MoveRow(SelectRow,Grid.RowCount); //A linha selecionada é movida para o final do StringGrid
Grid.RowCount:=Grid.RowCount -1;
{A última linha do StringGrid, justamente a que foi selecionada e movida para
o final, é deletada, dando uma idéia de todas as celulas se moverem para
cima sem precisar usar for, ou while}
end
else
begin //Se o StringGrid possuir apenas uma linha os dados somente são apagados
for i:=0 to Grid.ColCount do
Grid.Cells[i,1]:=´´;
primeiro:= true; //como o StringGrid está vazio o próximo dado novamente será o primeiro
end;
grid.Col := 0; {*}
end;

procedure MouseCell(Grid: TStringGrid;
var Coluna, Linha: integer);
var
Pt: TPoint;
begin
GetCursorPos(Pt);
Pt := Grid.ScreenToClient(Pt);
if PtInRect(Grid.ClientRect, Pt) then
Grid.MouseToCell(Pt.X, Pt.Y, Coluna, Linha)
else
begin
Coluna := -1;
Linha := -1;
end;
end;

procedure TFrm1.gridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
SelectRow := ARow; //A variável global SelectRow recebe a coordenada da linhaselecionada
SelectCol := ACol; //A variável global Selectcol recebe a coordenada da coluna selecionada
end;

{* - alerações que eu fiz}
{Desenvolvimento e Matéria por Lindomir Avelar
lindomir@arcosnet.com.br}

Um abraço.

Márcio.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar