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-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Columnas adicionales en TDBGrid

Hola tengo un componente TDBGrid que muestra el contenido de una tabla MySQL con los campos Codigo Cantidad y Precio, yo lo que quiero es añadir una columna a mi TDBGrid para almacenar información útil para el usuario pero que no se almacene en la base de datos.
Para crear una nueva columna hago lo siguiente en el evento OnCreate de mi formulario:

Código Delphi [-]
DBGrid1.Columns.Add.Title.Caption := 'Nueva Columna';

hasta aquí bien, mi columna adicional es creada pero no se cómo introducir datos en ella, ni a mano, porque todo lo que meto no se guarda ni mediante código.

Tal vez lo que intente hacer no se pueda, ¿me ayudáis?

Feliz Navidad y muchas gracias.
Responder Con Cita
  #2  
Antiguo 23-12-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
Cita:
Empezado por noob Ver Mensaje
Hola tengo un componente TDBGrid que muestra el contenido de una tabla MySQL con los campos Codigo Cantidad y Precio, yo lo que quiero es añadir una columna a mi TDBGrid para almacenar información útil para el usuario pero que no se almacene en la base de datos.
Para crear una nueva columna hago lo siguiente en el evento OnCreate de mi formulario:

Código Delphi [-]DBGrid1.Columns.Add.Title.Caption := 'Nueva Columna';


hasta aquí bien, mi columna adicional es creada pero no se cómo introducir datos en ella, ni a mano, porque todo lo que meto no se guarda ni mediante código.

Tal vez lo que intente hacer no se pueda, ¿me ayudáis?

Feliz Navidad y muchas gracias.
Hola noob

Soy yo o eso me suena un poco contradictorio ????
__________________
Ask questions. Think for yourself. Wake up and you’ll make the difference
Responder Con Cita
  #3  
Antiguo 23-12-2008
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
lo que necesitas es crear un campo calculado, en el dataset boton derecho del mouse en la opcion field Editor, ahi podras crear uno nuevo y lo veraz en el dbgrid, modificas el valor en el evento oncalcfields
Responder Con Cita
  #4  
Antiguo 23-12-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola noob, creo que deberías explicar un poco mas para que necesitas tu nuevo campo, ¿pertenece a tu tabla?, si utilizas un ClientDataSet todo lo que vayas registrando e inclusive campos temporales se almacenan en memoria hasta que no apliques ApplyUpdates, menos en el caso de que te crees un campo en memoria, ya que no estara en tu tabla.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 23-12-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Cita:
Empezado por Fenareth Ver Mensaje
Cita:
Empezado por noob
...pero que no se almacene en la base de datos...
...porque todo lo que meto no se guarda ni mediante código...
Hola noob

Soy yo o eso me suena un poco contradictorio ????
Fenareth, no es contradictorio porque esa información no quiero que se guarde en la base de datos pero sí quiero que se guarde temporalmente en memoria principal mientras se está ejecutando mi aplicación.

Cita:
Empezado por luisgutierrezb
lo que necesitas es crear un campo calculado, en el dataset boton derecho del mouse en la opcion field Editor, ahi podras crear uno nuevo y lo veraz en el dbgrid, modificas el valor en el evento oncalcfields
Supongo que eso dependerá del tipo de Dataset utilizado porque en mi caso no veo dicha opción.

Cita:
Empezado por Caro
Hola noob, creo que deberías explicar un poco mas para que necesitas tu nuevo campo, ¿pertenece a tu tabla?, si utilizas un ClientDataSet todo lo que vayas registrando e inclusive campos temporales se almacenan en memoria hasta que no apliques ApplyUpdates, menos en el caso de que te crees un campo en memoria, ya que no estara en tu tabla.

Saluditos
Hola Caro, te explico un poco, tengo una tabla Ventas con los campos Producto Unidades Precio Proveedor, el campo Producto mostrará el código de producto (en mi base de datos tengo también una tabla Productos con los campos Codigo y Descripcion). Lo que hago es esto:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  ListaProductos: TStringList;
  i: integer;
begin
  ListaProductos := TStringList.Create;
  with BaseDatos.Tabla('Producto') do
    try
      Active := true;
      First;
      DisableControls;
      while not EOF do
        begin
          ListaProductos.Add(FieldByName('Codigo').AsString);
          Next;
        end;
    finally
      Active := false;
      for i := 0 to DBGrid1.Columns.Count - 1 do
        begin
          if (DBGrid1.Columns[i] as TColumn).FieldName = 'Producto' then
            begin
              DBGrid1.Columns[i].PickList := ListaProductos;
              Break;
            end;
        end;
      EnableControls;
      ListaProductos.Free;
    end;
end;

De este modo en el campo Producto del TDBGrid tengo todos los códigos de producto que hay en la tabla Productos listos para que el usuario escoja uno de ellos. El problema es que yo quiero añadir una columna adicional para que me muestre también la descripción del producto ya que seleccionar el producto "PR0034" puede que no diga mucho sin embargo si selecciono el producto "PR0034" y nada más seleccionarlo se me rellena la columna de al lado con "2 GB Memoria RAM DDR 400 MHz" entonces el usuario sabe bien qué producto ha cogido, pero claro esa información adicional no ha de guardarse en la tabla Ventas sino que sólo ha de mostrarse para dar información adicional al usuario.

Lo que hago es crear esa columna nueva:

Código Delphi [-]
DBGrid1.Columns.Add.Title.Caption := 'Descripcion';

Pero no sé cómo asignar al contenido de la celda de la nueva columna la descripción del producto cuyo código es el seleccionado. Primero porque no encuentro un evento que se dispare al escoger un código del PickList (el que más se ajusta a lo que quiero es el evento OnColExit del TDBGrid) y segundo porque no veo ninguna propiedad que sea el contenido de una celda.

Espero haberme explicado.

Saludos.

Última edición por noob fecha: 23-12-2008 a las 16:48:04.
Responder Con Cita
  #6  
Antiguo 23-12-2008
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Con los calcfields creo que no te funcionara porque estos se resetearan cada vez que se ejecute el evento. podrias probar talvez on el componente de las Jedi el jvMemoryData que es una tabla en memoria.
Responder Con Cita
  #7  
Antiguo 23-12-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
¿No se puede hacer con el TDBGrid sin más o cómo mucho usando alguna estructura de datos tipo array dinámico?
Responder Con Cita
  #8  
Antiguo 24-12-2008
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
Cita:
Empezado por noob Ver Mensaje
¿No se puede hacer con el TDBGrid sin más o cómo mucho usando alguna estructura de datos tipo array dinámico?
No necesitas hacer nada de eso, la vida es muy sencilla con delphi. Lo que tienes que hacer en primer lugar es olvidarte del Picklist, eso no sirve para lo que quieres, lo que necesitas es un lookup combo box, en el cual expecifiques las columnas que quieres visualizar (Código y descripción).

Antes que nada, si de lo que hablo no entiendes algo, busca en la ayuda de delphi las palabras en negrita.

Empecemos, primero tienes que crear los TField de la tabla "Producto", una vez creados, posicionado en el campo "Codigo" y pulsa F11 para mostrar las prompiedades del TField, veras las propiedades "LookupDataSet, LookupKeyFields y LookupResultField)

Segundo, añade un dataset nuevo que devuelva los datos del código y descripción que quieres visualizar. Añade un dataSource y asociale el DataSet creado.

Tercero asocia el dataSource creado a la propiedad TField.LookupDataSet del campo "Codigo". En la propiedad TField.LookupKeyFields pones los campos del DataSet creado separados por ";" ejemplos: "CODIGO;DESCRIPCION". En la propiedad TField.LookupResultField poner el campo del que tomará el valor a guardar en tu tabla por ejemplo: 'CODIGO'.

Cuarto, tienes que abrir el DataSet creado con el resto de los DataSet.

Fin, ahora cuando en el dbgrid pulses sobre el botón del campo "CODIGO"SE mostrará el código y descripción, justo lo que quieres.

un saludo
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
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
Seleccionar multiples columnas en TDbGrid Leandro Ferrara OOP 1 01-11-2008 23:02:29
TDBGrid caperucitaazul C++ Builder 10 07-02-2006 23:27:30
TDBGrid didier Varios 1 05-04-2005 21:58:15
Componentes adicionales para kylix 3 OE. inexperto Lazarus, FreePascal, Kylix, etc. 13 13-12-2004 05:33:30
Problemas con TDBGrid Novás Varios 0 30-01-2004 10:32:20


La franja horaria es GMT +2. Ahora son las 15:46:20.


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