Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como eliminar una fila del stringGrid. (https://www.clubdelphi.com/foros/showthread.php?t=36452)

Arturo 12-10-2006 15:54:35

como eliminar una fila del stringGrid.
 
saludos, disculpen pero esto ingresando datos en un stringGrid para despues ser tomados e ingresarlos por medio de sentencias sql insert... ahora no se como arregrar el asunto de una vez que tengo los datos en el stringGrid quisiera borrar alguno y este es el codigo que tengo:
Código PHP:

los encabezados son estos:

mis encabezados del   StringGrid1son de esta forma que son los 4 campos  StringGrid1.Cells[0,0]:='Id';
 
StringGrid1.Cells[1,0]:='Descripcion';
 
StringGrid1.Cells[2,0]:='Especificacion';
 
StringGrid1.Cells[3,0]:='Iva'
procedure  eliminiar; var
    
:  integer;
begin
    
if(iNumero <> - 1then begin //nada mas verifica  que haiga regsitrso en el stringgrid          if(Application.MessageBox('¿Desea eliminar el artículo  seleccionado?','Eliminar',
                                      
mb_OK +  mb_Cancel ) = smbOKthen begin
            
for := stringGrid1.Row to  stringGrid1.RowCount do begin
                stringGrid1
.Cells[0,i+1] :=  IntToStr(StrToInt(stringGrid1.Cells[0,i+1]) - 1);
                 
stringGrid1.Rows[i] := stringGrid1.Rows[i+1];
                            
end;
            if(
stringGrid1.RowCount 2then  begin
                stringGrid1
.RowCount := stringGrid1.RowCount -  1;
                          
end
            
else begin
                 stringGrid1
.Cells[0,1] := '';
                
stringGrid1.Cells[1,1] :=  '';
                
stringGrid1.Cells[2,1] := '';
                 
stringGrid1.Cells[3,1] := '';
           
end;
            
iNumero :=  iNumero 1;
              
end;
     
end;
    
txtCodigo.SetFocus;
end;

pero me borrar pero el campo del stringGridStringGrid1.Cells[0,0]:='Id'si tengo un valos por decirlo 6 me decrementa en uno me debe de respetar

gracias.

Lonidas 12-10-2006 16:50:42

hola.
Ósea tu tienes un stringrid así
|--|----------|-------------|---|
|id|descripcion|especificacion|iva|
|--|----------|-------------|---|
|--|----------|-------------|---|


Y lo que deseas es es eliminar todo un registro(fila)
Ahora carga un registro(fila) y guardas en la tabla o cargas varios registros(filas) y luego lo guardas en la tabla??

Arturo 12-10-2006 20:09:54

exactamente asi es mi stringgrid, lo que pretendo es ingresarlos primero y despues guardarlo en mi tabla por medio de sql insert, o tambien hago una consulta y vuelvo a cargar los registros y selecciono y pudiera borrarlo por sql con delete.

|--|----------|-------------|---|
|id|descripcion|especificacion|iva|
|--|----------|-------------|---|
8 Printer N
|--|----------|-------------|---|
9 Puetos USB N
|--|----------|-------------|---|
10 Uno mas N

yo ingrese tres filas y por decir el numero 9 o quizas el 10 lo borre me quedara solo uno, una vez que ya esten seguro por decirlo (el usuario...) lo guardar, el procedimiento ya lo ataque y efectivamente me recorre el stringGrid con las filas.

en conclusion: para eliminar un registro ya guardado en la tabla me hace falta el procedimiento, por ahora solo he arreglado lo de eliminar una fila cuando este en el stringGrid antes de ser enviado a "guardar".

no se en donde estoy mal con el codigo antes citado.
gracias.

roman 12-10-2006 20:54:04

El StringGrid tiene un método protegido DeleteRow, que supongo es para eso. Digo supongo porque no lo he probado. El punto es que al estar protegido no puedes usarlo directamente pero puedes usar el truco de la desprotección:

Código Delphi [-]
type
  // declaras un descendiente 'de palo' de TStringGrid
  THackGrid = class(TStringGrid);

...

// Haces un moldeo de tipos para poder acceder al método
THackGrid(StringGrid1).DeleteRow(...);

Por otro lado te pregunto, ¿por qué no usas un DBGrid? El StringGrid es un componente muy pobre y se alentará mucho cuando tengas varios registros. Si por alguna razón no deseas usar componentes db aware como el DBGrid, podrías optar por un LIstView en modo virtual. Uno de las razones por las cuales el DBGrid es tan exitoso es precisamente porque funciona en modo virtual: el control no alamacena todos los registros del dataset sino sólo los que se alcanzan a ver en la pantalla en un momento dado y va solicitando al dataset el resto conforme se necesitan. Puedes lograr algo similar con un ListView.

// Saludos


La franja horaria es GMT +2. Ahora son las 07:41:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi