Fórum Como excluir uma linha do StringGrid ??? #287366
07/07/2005
0
Como fazer para excluir uma linha do StringGrid, assim como um registro do DBGrid?
Cabelo
Curtir tópico
+ 0Posts
08/07/2005
Cabelo
Gostei + 0
08/07/2005
Massuda
Gostei + 0
08/07/2005
Cabelo
Mas me diga uma coisa.. pra que serve o método delete() do string grid?
Gostei + 0
08/07/2005
Massuda
Uma alternativa, seria ajustar a altura da linha em zero, mas o resultado (esteticamente) pode não agradar.
Gostei + 0
11/07/2005
Cabelo
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?
Gostei + 0
11/07/2005
Massuda
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).
Gostei + 0
11/07/2005
Cabelo
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????
Gostei + 0
12/07/2005
Orpolonio
Gostei + 0
12/07/2005
Cabelo
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..
Gostei + 0
12/07/2005
Massuda
Gostei + 0
12/07/2005
Márcio
...
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)