PDA

Ver la Versión Completa : Como asignar registro de dbgrid en StringGrid?


ezequiel913
24-09-2011, 00:41:32
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:

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 ;)

Queria saber como asignar la tupla que esta seleccionada en el DBGrid a un StringGrid?

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;


quiero saber si se puede seleccionar un registro en el StringGrid y eliminarlo?

Creo que te referis a una fila.

...
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
Hola
El stringGrid trabaja por celdas.
Cada celda representa un espacio donde se colocara la informacion, por ejemplo el titulo:
Código Delphi [-] (http://www.clubdelphi.com/foros/#) 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
[...] 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
Hola ezequiel913.

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


Código Delphi [-] (http://www.clubdelphi.com/foros/#)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 [-] (http://www.clubdelphi.com/foros/#)... 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
...
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 Notevi
24-09-2011, 22:43:46
No soy Ecfisa, pero te lo explicaré, es fácil:
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:
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
:eek::eek: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
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:


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 Notevi
27-09-2011, 23:54:56
Pues no, no se entiende :D

En tu código dice:

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
Pues no, no se entiende :D

En tu código dice:

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 Notevi
28-09-2011, 00:52:47
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 (http://www.clubdelphi.com/foros/showpost.php?p=413278&postcount=5)? :)

Casimiro Notevi
28-09-2011, 01:46:44
Insisto, ¿por qué no usar esto (http://www.clubdelphi.com/foros/showpost.php?p=413278&postcount=5)? :)

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
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 Notevi
28-09-2011, 21:07:21
Hola Niiña, por favor, revisa nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), gracias.

ecfisa
28-09-2011, 21:09:27
Hola Niiña y bienvenido a los foros de Club Delphi. :)

Por favor, crea un nuevo hilo con tu pregunta.

Te invito a que leas la Guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

Un saludo.