PDA

Ver la Versión Completa : Grilla mejor que dbGrid


Carmelo Cash
18-07-2015, 21:52:50
Hola Foro:

Estoy haciendo una interface para asientos contabes y estoy utilizando un rxMemoryTable y un dbgrid para cargar las cuentas y los importes en Debe y Haber.

La consulta es si existe un DbGrid más lindo y que permita cambiar las posiciones de las filas, o sea que el usuario pueda subir y bajar las cuentas?

Estoy usando Delphi 7 y Firebird.

Desde ya muchas gracias por su atención.

Casimiro Notevi
18-07-2015, 22:57:47
Las posiciones de las filas dependen de la consulta sql del dataset que hayas enlazado al dbgrid, mediante su datasource.
Lo que sí puedes hacer es agrupar, mover las columnas, etc. con algunos otros dbgrid.

Carmelo Cash
18-07-2015, 23:18:51
Gracias Casimiro, ¿Sabés que otro DbGrid puedo usar que permita subir y bajar filas?

Casimiro Notevi
18-07-2015, 23:37:12
Gracias Casimiro, ¿Sabés que otro DbGrid puedo usar que permita subir y bajar filas?

goto #2 ;)

Carmelo Cash
19-07-2015, 00:12:19
No sé. No entiendo. :(

Casimiro Notevi
19-07-2015, 00:22:16
Las posiciones de las filas dependen de la consulta sql del dataset que hayas enlazado al dbgrid, mediante su datasource.

Si quieres cambiar las posiciones, debes cambiar el orden en el sql.
O no usar un dbgrid, sino un stringgrid, o algo similar.

Carmelo Cash
19-07-2015, 00:27:05
Ok. Gracias.

Casimiro Notevi
19-07-2015, 00:41:23
Por favor, si no lo has entendido, no dudes en preguntar de nuevo, te lo aclaro con un ejemplo si es necesario.

gatosoft
19-07-2015, 06:45:33
Hola Carmelo..

No tengo presente ahora un compornnte Free que pueda hacer lo que dices en Delphi 7. Pero concuerdo con Casimiro en su aprecisión en la que dice que la posición d elas Filas depende mas de la Consulta (Query) que de la Grilla.

Nunca he manejado el RxMemoryTable, pero si funciona como creo, podrías intentar un "truco" para ordenar la grilla. Esto sería agregando a tu consulta un campo "Orden" que se numerara secuencialmente de manera que tu consulta se ordene por este campo (el componente MemoryTable debería tener una opcion para ordenar por este campo)

Cuando intentes hacer el cambio de orden en la grilla, podrias intercacambiar el valor de este campo con sus vecnos (arriba, abajo) y nuevamente generar el re-ordenamiento... (hay que hacer ucho trabajo manual, pero podria funcionarte mientras lo resuelves mejor)

Saludo,

AgustinOrtu
19-07-2015, 07:17:23
EDITO:
Bueno, entendi cualquier cosa :D mejor borro lo que puse que nada que ver

En fin, creo que lo mejor es usar un TClientDataSet. En tu ClientDataSet deberias tener un campo numerico de orden como menciona gatosoft, y luego lo que haces es permitirle aumentar o decrementar ese numero. Luego reordenas el dataset. Es decir, te tendria que quedar algo como esto


procedure TForm1.BtnMoveUpClick(Sender: TObject);
begin
if cds.First then
Exit;

try
cds.Edit;
cds.FieldByName('Order').AsInteger := cds.FieldByName('Order').AsInteger - 1;
finally
cds.Post;
// ordenar dataset
end;
end;


Otra forma de verlo es utilizar cursores. Hay un pdf excelente de Cary Jensen (si mal no recuerdo, y espero haber escrito bien su nombre) en el FTP del club que no tiene desperdicio

Casimiro Notevi
19-07-2015, 10:23:58
Desde luego que hay formas de hacer lo que quiere, pero no creo que encuentro un componente dbgrid que lo haga. Tendrá que ser manualmente.

avmm2004
19-07-2015, 12:04:08
Hola a todos, yo creo que de lo que se trata es que sea el usuario final al interactuar con el dbgrid el que pueda cambiar las columnas, agruparlas, etc.... para ello uno de los que lo hacen muy bien (entre otro montón) son los componentes de http://www.devexpress.com.

Casimiro Notevi
19-07-2015, 13:42:24
Hola a todos, yo creo que de lo que se trata es que sea el usuario final al interactuar con el dbgrid el que pueda cambiar las columnas, agruparlas, etc.... para ello uno de los que lo hacen muy bien (entre otro montón) son los componentes de http://www.devexpress.com.

Pregunta por mover las filas arriba/abajo.