Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Question Agregando articulos a un StringGrid

Saludos, gracias por haber colaborando conmigo en uno que otro punto y por siempre estar dispuestos a ayudarme a aprender cosas nuevas de ustedes que saben mucho de esto.

Tengo un string grid, al cual quiero agregar artículos y quitar según sea el caso, ya en este foro he preguntado sobre quitar y me han dado formas eficientes de hacerlo, pero un inconveniente al agregar.

Mi string grid consta de 7 columnas:
1- Referencia -------------------- Para que aquí valla el código del articulo
2- Cantidad -------------------- Obviamente la cantidad de cuantos artículos se van a facturar
3- Concepto -------------------- La descripción del articulo
4- Precio --------------------- El precio individual de cada articulo
5- Neto --------------------- Aquí el total de cantidad x Precio
6- ITBIS ---------------------- Aquí si aplica ITBIS, Neto * 18/100
7- Total ---------------------- Neto + ITBIS

Como saben, para que no pierda el formato de las cabeceras, un strind Grid debe al menos contener 1 fila adicional aparte de la fila del encabezado. Aquí comienza mi inconveniente.

Para agregar articulos hago esto:
Código Delphi [-]
Var
Precios, Neto, Impuesto  : Real;
Begin
SG.Row := SG.Rowcount - 1;
SG.Cells[0, SG.Row] := IntToStr(CodProd);
SG.Cells[1, SG.Row] := FaddProducto.Ecantidad.Text;
SG.Cells[2, SG.Row] := FaddProducto.Qtemp.FieldByName('Descripcion').AsString;
// Precio 1 -----------------------------------------------
if FaddProducto.RB1.Checked = true then
Precios:= StrtoFloat(FaddProducto.EPrecio.Text);
// Precio 2 -----------------------------------------------
if FaddProducto.RB2.Checked = true then
Precios:= StrtoFloat(FaddProducto.EPrecio2.Text);
// Precio 3 -----------------------------------------------
if FaddProducto.RB3.Checked = true then
Precios:= StrtoFloat(FaddProducto.EPrecio3.Text);
// Precio 4 -----------------------------------------------
if FaddProducto.RB4.Checked = true then
Precios:= StrtoFloat(FaddProducto.EPrecio4.Text);
//----------------------------------------------------------
SG.Cells[3, SG.Row] := FloattoStr(Precios);
SG.Cells[4, SG.Row] := FloatToStr(Precios * Strtofloat(FaddProducto.Ecantidad.Text));
Neto:= Precios * Strtofloat(FaddProducto.Ecantidad.Text);
// Impuesto ------------------------------------------------
if Faddproducto.AplicaITBIS.Checked = true then
Begin
SG.Cells[5, SG.Row] := FaddProducto.Qtemp.FieldByName('ITBIS').AsVariant/100 * Precios;
Impuesto:= FaddProducto.Qtemp.FieldByName('ITBIS').AsVariant/100 * PrecioS;
SG.Cells[6, SG.Row] :=  Floattostr(neto+Impuesto);
end
else
Begin
SG.Cells[5, SG.Row] := '0';
SG.Cells[6, SG.Row] :=  Floattostr(neto);
end;
//----------------------------------------------------------
SG.RowCount := SG.RowCount + 1;
end;

Que pasa con esto, que siempre al final, tengo que dejar el "SG.RowCount := SG.RowCount + 1;" Para que la siguiente linea este lista para introducir el nuevo articulo.

¿Que Necesito?
Quiero una forma eficiente de ignorar si es el primer articulo que se va a agregar (ya que hay una fila vacía en el string grid) o si es otro (2do, 3ro, Etc), para no tener que dejar una fila vacia al final de cada ves que agrego un articulo, es decir que la fila se cree en el momento que se va a insertar el articulo. Ya que si pongo "SG.RowCount := SG.RowCount + 1;" al inicio del código, la primera ves que se inserta, deja un espacio vació, obviamente porque ya había uno ahí.

Gracias!
Responder Con Cita
  #2  
Antiguo 23-12-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No entiendo qué quieres decir con lo de las líneas vacias, ni lo de "perder el formato de las cabeceras".
Responder Con Cita
  #3  
Antiguo 23-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No entiendo qué quieres decir con lo de las líneas vacias, ni lo de "perder el formato de las cabeceras".
En la imagen 1, esta el string grid normalmente con una fila vacia, en el numero dos, si eliminas la fila, la cabecera pierde el color de fondo, etc.
Imágenes Adjuntas
Tipo de Archivo: jpg 1.JPG (26,8 KB, 16 visitas)
Tipo de Archivo: jpg 2.JPG (20,9 KB, 15 visitas)
Responder Con Cita
  #4  
Antiguo 23-12-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si no entendí mal el problema, tendría que quedar así:
Código Delphi [-]
...
Var
  Precios, Neto, Impuesto, ITBIS : Real;
Begin
  if SG.Row = SG.FixedRows then // ¿ estamos la línea de cabeceras ?
    SG.Row := SG.Row + 1;  // avanzar una linea
  //----------------------------------------------------------
  {
     ... el resto de tu código 
  }
  //----------------------------------------------------------
  SG.RowCount := SG.RowCount + 1; // Agregar otra línea
  SG.Row := SG.Row + 1;           // el siguiente ingreso irá en la línea agregada
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 23-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Si no entendí mal el problema, tendría que quedar así:
Código Delphi [-]
...
Var
  Precios, Neto, Impuesto, ITBIS : Real;
Begin
  if SG.Row = SG.FixedRows then // ¿ estamos la línea de cabeceras ?
    SG.Row := SG.Row + 1;  // avanzar una linea
  //----------------------------------------------------------
  {
     ... el resto de tu código 
  }
  //----------------------------------------------------------
  SG.RowCount := SG.RowCount + 1; // Agregar otra línea
  SG.Row := SG.Row + 1;           // el siguiente ingreso irá en la línea agregada
end;

Saludos
"Fuera de Rango"

creo que lo enfocaste mal, me explico, la primera vez que se va a trabajar con el Grid, esta la cabecera mas 1 fila vacia, con mi codigo, "lleno" esa fila vacia y finalmente agrego la linea siguiente, es decir queda asi:

Código Delphi [-]
Var
Precios, Neto, Impuesto  : Real;
Begin
SG.Row := SG.Rowcount - 1;
 //----------------------------------------------------------
  {
     ... el resto del código 
  }
  //----------------------------------------------------------
SG.RowCount := SG.RowCount + 1;

Seria igual a esto:

---Cabecera---
---Primer articulo---
---Fila Vacia-----

con mi codigo, cada vez que agrego un articulo, al final tengo que dejar la siguiente linea, porque si agrego la linea antes de agregar el articulo, la primera vez, quedaría una fila vacia Arriba, es decir.
Código Delphi [-]
Var
Precios, Neto, Impuesto  : Real;
Begin
SG.RowCount := SG.RowCount + 1;
SG.Row := SG.Rowcount - 1;
 //----------------------------------------------------------
  {
     ... el resto del código 
  }
  //----------------------------------------------------------

---Cabecera---
---Fila Vacia-----
---Primer articulo---
Responder Con Cita
  #6  
Antiguo 23-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Posible solucion...

Creo que lo resolvi haciendo esto:

Código Delphi [-]
if (SG.RowCount = 2) and (SG.Cells[0, SG.Row] = '') then

else
SG.RowCount := SG.RowCount + 1; // Agregar otra línea

SG.Row := SG.Rowcount - 1;
Responder Con Cita
  #7  
Antiguo 27-12-2018
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Nunca me ha cuajado porque muchos foreros utilizan StringGrid para mostrar datos en vez de usar TDBGrid u otra variante como TwwDBGrid de Infopower...

Según mi humilde opinión es como reinventar la rueda...

Podrían indicar que beneficios nos brinda esta técnica de usar StringGrid v/s DBGrid..

Se los agradezco y talvez me pueda reconvertir...
Un abrazo
Responder Con Cita
  #8  
Antiguo 27-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje
Nunca me ha cuajado porque muchos foreros utilizan StringGrid para mostrar datos en vez de usar TDBGrid u otra variante como TwwDBGrid de Infopower...

Según mi humilde opinión es como reinventar la rueda...

Podrían indicar que beneficios nos brinda esta técnica de usar StringGrid v/s DBGrid..

Se los agradezco y talvez me pueda reconvertir...
Un abrazo
Mira realmente en mi caso no había explorado la posibilidad de usar el DBGrid con el clientdataset pero la diferencia es abismal, y el uso es muy versátil.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
tabla articulos josi Varios 28 02-04-2008 10:30:55
Reinstalación W2K3 Server, agregando equipos al dominio... MaGNa Redes 0 06-06-2005 11:40:55
problema agregando formularios al proyecto Maga84 Varios 8 28-04-2005 22:13:22
Artículos en cd nugame Conexión con bases de datos 0 01-12-2004 13:03:45
Agregando campos en tiempo de ejecucion Markoz Firebird e Interbase 3 31-10-2003 02:32:23


La franja horaria es GMT +2. Ahora son las 16:07:08.


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
Copyright 1996-2007 Club Delphi