Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como asignar registro de dbgrid en StringGrid? (https://www.clubdelphi.com/foros/showthread.php?t=75876)

ezequiel913 24-09-2011 00:41:32

Como asignar registro de dbgrid en StringGrid?
 
Hola Gente!!

Queria saber como asignar la tupla que esta seleccionada en el DBGrid a un StringGrid? Por que quiero hacer esto? bueno el tema es el siguiente, hago una consulta que busca todos los articulos de la tabla materiales y los muestra en un DBGrid, y quiero poder seleccionar una tupla y presionar un boton y agregar esa tupla seleccionada en el StringGrid. Tambien quiero saber si se puede seleccionar un registro en el StringGrid y eliminarlo?

bueno eso seria todo, y creo que fui bastante claro con lo que necesito. sino se entienden avisenme.

saludos.

Caral 24-09-2011 00:47:49

Hola
El stringGrid trabaja por celdas.
Cada celda representa un espacio donde se colocara la informacion, por ejemplo el titulo:
Código Delphi [-]
   SGrid.Cells[0,0] := 'Código';
   SGrid.Cells[1,0] := 'Descripción';
   SGrid.Cells[2,0] := '# Pieza';
   SGrid.Cells[3,0] := 'Cantidad';
Y asi con todo lo demas.
En el caso de la informacion de la tabla simplemente se coloca el dato.
Saludos

ecfisa 24-09-2011 00:57:39

Hola ezequiel913.

Por favor para la próxima un hilo para cada pregunta ;)

Cita:

Queria saber como asignar la tupla que esta seleccionada en el DBGrid a un StringGrid?
Código Delphi [-]
var
  i: Integer;
begin
  for i:= 0 to DBGrid1.Columns.Count-1 do
   with StringGrid1 do
     Cells[FixedCols+i,Row]:= DBGrid1.Columns[i].Field.AsString;

Cita:

quiero saber si se puede seleccionar un registro en el StringGrid y eliminarlo?
Creo que te referis a una fila.
Código Delphi [-]
...
type
  TStringGrid = class(Grids.TStringGrid);
...
implementation
...
begin
 StringGrid1.DeleteRow(StringGrid1.Row); // Borra fila actual.
end;

Saludos.

Edito: No había visto tu respuesta amigo, disculpas. Aunque es mas o menos lo mismo que le acabas de sugerir. :)

ezequiel913 24-09-2011 00:58:03

Cita:

Empezado por Caral (Mensaje 413268)
Hola
El stringGrid trabaja por celdas.
Cada celda representa un espacio donde se colocara la informacion, por ejemplo el titulo:
Código Delphi [-] SGrid.Cells[0,0] := 'Código'; SGrid.Cells[1,0] := 'Descripción'; SGrid.Cells[2,0] := '# Pieza'; SGrid.Cells[3,0] := 'Cantidad';

Y asi con todo lo demas.
En el caso de la informacion de la tabla simplemente se coloca el dato.
Saludos

Hola Caral!!

Los nombres de las columnas del StringGrid los pongo en tiempo de Diseño, lo que quiero saber es como asignar el registro que esta seleccionado en el DBGrid al StringGrid. osea vos me podes decir que es mas facil, recorrer la tabla y asignar directamente en el StringGrid, pero yo necesito mostrar esos datos en el DBGrid y seleccionar el registro que quiero y asignarlo al StringGrid, una ves que asigne todos los registros que necesito en el StringGrid los tengo que guardar en otra tabla, osea a los datos que estan en el DBGrid cuando los paso al StringGrid les agrego unos atributos mas, para poderlos guardar en otra tabla. saludos, espero que hayas entendido bien.

saludos, gracias.

Al González 24-09-2011 01:16:31

Cita:

Empezado por ezequiel913 (Mensaje 413273)
[...] a los datos que estan en el DBGrid cuando los paso al StringGrid les agrego unos atributos mas, para poderlos guardar en otra tabla.

Hola, tal vez me perdí de algo pero, si es como entiendo, ¿por qué mejor no usas dos DBGrids? Supongo que para no enviar a la base de datos la información sino hasta que el usuario haya terminado de seleccionar los registros que desea. Si este fuera el caso, podrías usar un TClientDataSet que te permite mantener los registros en memoria antes de guardarlos.

Saludos. :)

Al González.

Caral 24-09-2011 01:23:47

Hola
Recuerda una cosa:
El dbgrid obtiene sus datos de un dataset, osea un table o un query, estos son los que tienen los datos, NO el dbgrid que solo los muestra.
Sabiendo esto tienes que obtener esa información del dataset y pasársela al stringrid.
Es muy sencillo, si es lo que estoy entendiendo.
Si no te queda claro algo no te preocupes, sigue preguntando.
Saludos

ezequiel913 24-09-2011 02:12:27

Cita:

Empezado por ecfisa (Mensaje 413272)
Hola ezequiel913.

Por favor para la próxima un hilo para cada pregunta ;)


Código Delphi [-]var i: Integer; begin for i:= 0 to DBGrid1.Columns.Count-1 do with StringGrid1 do Cells[FixedCols+i,Row]:= DBGrid1.Columns[i].Field.AsString;



Creo que te referis a una fila.
Código Delphi [-]... type TStringGrid = class(Grids.TStringGrid); ... implementation ... begin StringGrid1.DeleteRow(StringGrid1.Row); // Borra fila actual. end;


Saludos.

Edito: No había visto tu respuesta amigo, disculpas. Aunque es mas o menos lo mismo que le acabas de sugerir. :)


Muchas Gracias Ecfisa, pude resolver el tema que tenia.

Saludos!!!

ezequiel913 24-09-2011 02:14:27

Gracias Caral y Al Gonzalez por la contestacion y el tiempo utilizado.

saludos.!!!:):cool:

ezequiel913 24-09-2011 22:17:35

Código Delphi [-]
...
type
  TStringGrid = class(Grids.TStringGrid);
...
implementation
...
begin
 StringGrid1.DeleteRow(StringGrid1.Row); // Borra fila actual.
end;

Hola Ecfisa!! queria saber si me podes explicar un poco mas este procedimiento, osea lo que yo quiero es poder eliminar la fila del StringGrid que esta seleccionada.

Saludos. Gracias!!

Casimiro Noteví 24-09-2011 22:43:46

No soy Ecfisa, pero te lo explicaré, es fácil:
Código Delphi [-]
StringGrid1.DeleteRow(StringGrid1.Row); // Borra fila actual.

StringGrid1.Row devuelve el número de fila donde está posicionado el
cursor en el grid, o sea, en la fila de la celda donde está.
Imagina que está posicionado en la fila 2.

Es lo mismo el código anterior, que hacer directamente:
Código Delphi [-]
stringgrid1.DeleteRow(2);

ezequiel913 24-09-2011 23:15:39

Gracias Casimiro Notevi!!!
me ayudo mucho tu explicacion.

Saludos!!

ezequiel913 25-09-2011 00:16:34

Por mis amigos
 
:eek::eek:
Cita:

Empezado por ezequiel913 (Mensaje 413373)
Gracias Casimiro Notevi!!!
me ayudo mucho tu explicacion.
esto se lo dedico a mi NOVIA SOL que la re amo,y perdon roge por no lllevarte al asado
Saludos!!


ezequiel913 27-09-2011 23:37:31

Problema al borrar una linea del StringGrid!
 
Hola Gente!!

bueno el tema que tengo es que me elimina mal la fila que selecciono. como es esto??

selecciono una fila del StringGrid y apretó el botón borrar me borra la fila que seleccione pero parece que la deja almacenada en algun lado, una vez que la borre y despues la quiero cargar de vuelta tengo una validacion que no me deja entrar 2 filas iguales, osea me dice que ya fue cargada esa fila, pero no tiene que ser asi, por que yo la borre con anterioridad, eso quiere decir que no me borro del todo la fila que le dije antes. por que en algun lado quedo registrado sino no me tendria que decir que ya fue cargado.

este es el codigo de borrar que tengo:

Código Delphi [-]
  If (SG.Cells[1,SG.Row] = '') or (SG.Row = 0) Then Begin

   Application.MessageBox('No se puede eliminar esta fila','Mensaje');
   Exit;
  End
  Else begin

     SG.DeleteRow(SG.Row);
  
   end;


bueno espero que se entienda lo que queiro decir.

saludos!!!:cool:

Casimiro Noteví 27-09-2011 23:54:56

Pues no, no se entiende :D

En tu código dice:

Código Delphi [-]
If (SG.Cells[1,SG.Row] = '') or (SG.Row = '0') Then
Begin
  Application.MessageBox('No se puede eliminar esta fila','Mensaje');    
  Exit;   
End   
Else 
begin       
  SG.DeleteRow(SG.Row);       
end;
Resumiendo: si la celda está vacía o tiene un cero, saca un mensaje y sale. NO borra.
Si tiene algo escrito distinto de '' y distinto de cero, (que por cierto tendrás que poner el cero entre comillas porque el stringgrid sólo almacena cadenas)
entonces sí la borra.

¿Y cuál es el problema entonces?

ezequiel913 28-09-2011 00:11:00

Cita:

Empezado por Casimiro Notevi (Mensaje 413677)
Pues no, no se entiende :D

En tu código dice:

Código Delphi [-]
If (SG.Cells[1,SG.Row] = '') or (SG.Row = '0') Then
Begin
  Application.MessageBox('No se puede eliminar esta fila','Mensaje');    
  Exit;   
End   
Else 
begin       
  SG.DeleteRow(SG.Row);       
end;
Resumiendo: si la celda está vacía o tiene un cero, saca un mensaje y sale. NO borra.
Si tiene algo escrito distinto de '' y distinto de cero, (que por cierto tendrás que poner el cero entre comillas porque el stringgrid sólo almacena cadenas)
entonces sí la borra.

¿Y cuál es el problema entonces?


Lo que esta dentro del IF es para que no borre una linea que esta vacía y tampoco para que no borre la linea donde están los títulos de las columnas.

el tema es así:
- tengo que ingresar datos de productos en un StringGrid con su respectiva cantidad, si quiero ingresar mas cantidad del mismo producto solo modifico la columna de cantidad. si por alguna razón elimino este producto y después lo quiero ingresar devuelta me dice que ya fue cargado anteriormente, eso quiere decir que en algún lado quedo registrado ese Producto en el StringGrid o en otro lado.
Tengo que poder cargar productos y eliminarlos cuantas veces quiera, y si ya fue eliminado del StringGrid poder volver a cargarlo sin ningún problema.

sino se entiende avísame de vuelta.

saludos

Casimiro Noteví 28-09-2011 00:52:47

Cita:

Empezado por ezequiel913 (Mensaje 413678)
si por alguna razón elimino este producto y después lo quiero ingresar devuelta me dice que ya fue cargado anteriormente, eso quiere decir que en algún lado quedo registrado ese Producto en el StringGrid o en otro lado.

Ahora sí te he entendido, entonces estaba bien el código que has puesto.
¿Y cómo cargas los datos en el stringgrid?, ¿qué control haces antes y durante la carga?

Es que un stringgrid no hace nada, son simples cadenas de textos que colocas en las celdas que te parece, no tiene ningún control de ningún tipo.

Al González 28-09-2011 01:28:31

Insisto, ¿por qué no usar esto? :)

Casimiro Noteví 28-09-2011 01:46:44

Cita:

Empezado por Al González (Mensaje 413680)
Insisto, ¿por qué no usar esto? :)

Desde luego que es la mejor opción, porque lo que está intentando conseguir ezequiel913 es demasiado engorroso de sincronizar correctamente. Y con la opción de Al González está sincronizado automáticamente, o como mínimo, te ahorras de estar copiando datos de un lado para otro.

Niiña 28-09-2011 20:36:12

Como seleccionar con un click una fila selecciona en el dbgrid.
 
Holaa.. Quisiera saber como seleccionar una fila del dbgrid haciendo click en un Form y agregarlo o que aparezca en un Edit en otro Form..?

Casimiro Noteví 28-09-2011 21:07:21

Hola Niiña, por favor, revisa nuestra guía de estilo, gracias.


La franja horaria es GMT +2. Ahora son las 12:32:23.

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