PDA

Ver la Versión Completa : No Regreso en el DbGrid


Gangster
11-07-2007, 21:15:21
Hola a todos, Tengo una forma con un dbgrid, entonces en este dbgrid hago el cobro de tickets, pero lo que no quiero que pase, es que en el dbgrid se puedan regresar hacia arriba, no se como decirle al dbgrid que no se haga eso, si ya se cobro y paso de renglon, ya no regresarse ni a borrar ni nada, siempre hacia enfrente es que si ya lo cobro y paso de renglon estara impreso en el ticket de pago, entonces por eso no quiero que se pueda ir para arriba, agradeceria alguna idea o solucion, Saludos y Bye.

ElDioni
12-07-2007, 16:17:49
No se como funciona tu programa, si, por ejemplo, lee los artículos con un lector de codigo de barras y se van añadiendo así las lineas en el dbgrid, o si el dbgrid esta enganchado a algún datasource que está a su vez enganchado con un adoquery y desde este insertas los nuevos registros; quiero decir que tu explicación se me hace un poco corta para darte una solución concreta, así a bote pronto te puedo decir que poniendo:

dbgrid1.enabled:=false;

así no podras moverte ni arriba, ni abajo, ni modificarlo, ni nada, espero te sirva de algo.

Gangster
12-07-2007, 21:02:40
No se como funciona tu programa, si, por ejemplo, lee los artículos con un lector de codigo de barras y se van añadiendo así las lineas en el dbgrid, o si el dbgrid esta enganchado a algún datasource que está a su vez enganchado con un adoquery y desde este insertas los nuevos registros; quiero decir que tu explicación se me hace un poco corta para darte una solución concreta, así a bote pronto te puedo decir que poniendo:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)dbgrid1.enabled:=false;

así no podras moverte ni arriba, ni abajo, ni modificarlo, ni nada, espero te sirva de algo.
Hola Dioni, Mira Mi programa esta ligado a un ttable por un datasource, todavia no leemos de un hardware para codigo de barras solo lo que quiero es que no se vaya para arriba dentro del dbgrid, osea producto ya vendido (Significa que ya paso de Renglon en el dbGRID) pues no devolverse para nada arriba es lo que busco y no tengo idea, no tengo nada con ADO,ni con un Query, solo un dbgrid en una forma con un datasource ligado a un ttable, es todo, no se si con esto se entienda mas lo que en si busco y no lo he encontrado o no tengo idea, con lo que me dices pues deshabilito totalmente el dbgrid, creo que no me serviria eso.
Gracias por tu idea Saludos y Bye.

maxvera
12-07-2007, 21:36:24
¿Cómo identificas los registros de esa tabla? ¿Tienes un campo autoincremental para la clave primaria o algún id para el registro?

Si es así, dímelo y te discurro algo sencillo.

Gangster
12-07-2007, 21:46:04
¿Cómo identificas los registros de esa tabla? ¿Tienes un campo autoincremental para la clave primaria o algún id para el registro?

Si es así, dímelo y te discurro algo sencillo. Hola Maxvera mira, tengo ligado al dbgrid una tabla tipo detail con dos llaves primarias, entonces una con el id que tenga el master table, y la otra llave es porque si se venden muchos productos no se repita el renglon entonces voy incrementando el renglon despues de cada post (Qe seria cada vez que pase del renglon), la identificacion de los renglones pues es un id, igual a como se graba el numero de ticket en el master table, eso es la ligacion que tengo en las dos tablas.

maxvera
12-07-2007, 21:49:04
Bien.

No sé si me paso de listo (por la sencillez de la respuesta), pero esto debería funcionar:

procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
if Table1.RecNo < Table1.RecordCount then Table1.Last;
end;



Donde, evidentemente, Table1 hace referencia al DataSet ligado al DataSource del DBGrid.

En cualquier caso, deberías deshabilitar el procedimiento cuando edites o insertes un registro.

Espero que vayan por ahí los tiros.

Gangster
12-07-2007, 22:27:33
Bien.

No sé si me paso de listo (por la sencillez de la respuesta), pero esto debería funcionar:

Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin if Table1.RecNo < Table1.RecordCount then Table1.Last;
end;


Hola MaxVera Pero lo puse asi tal y como me dices pero entonces escribo un renglon en el dbgrid pero al dar la tecla tab no me deja pasar de renglon, y no puedo seguir escribiendo en le grid se queda ahi,como que dice estoy en el ultimo renglon y no me deja escribir otro lo toma ese renglon como el ultimo en la tabla, alguna otra sugerencia o idea, o que error este cometiendo este es mi codigo.

recdetail es mi tabla.

le puse el recordcount = 1, porque sin el ni me deja escribir en el primer renglon. siempre estaria en el ultimo

procedure TASEcom.tbRecDetailAfterScroll(DataSet: TDataSet);
begin
if(ASEcom.tbRecDetail.RecordCount = 1)then
begin
if (ASEcom.tbRecDetail.RecNo < ASEcom.tbRecDetail.RecordCount) then
ASEcom.tbRecDetail.Last;
end;
end;

maxvera
12-07-2007, 22:59:38
Prueba esto (con las modificaciones adecuadas a tu código):

procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
if (not Table1.State in [dsEdit, dsInsert])
and (Table1.RecNo < Table1.RecordCount)
then Table1.Last;
end;

Arturo_
12-07-2007, 23:12:02
Mira lo que tienes que hacer es:
En este codigo si es primer registro no inserta nada, pero si la tabla contiene registros inserta uno nuevo ok.

if (Table1.RecountdCount <> 0) then
Table1.Append
Table1.Edit;
Table1.FieldByNAme('Nombre').AsString := 'Hello';
Table1.Post;

ElDioni
13-07-2007, 11:42:11
¿No has pensado en meterlo en una caja de texto el artículo en vez de directamente en el grid?.
Me explico:
Creo que lo que haces es añadir directamente en el grid, si desabilitaras el grid con lo que te dije enabled:=false y metieras el codigo del artículo en una caja de texto y al pulsar el intro lo añadieras al objeto table, aparecería en el grid ya que esta ligado con el datasource y no podrías manipularlo, cuando dieras de alta el artículo vaciarías la caja de texto y esperaría a que le metieras otro.
No se si te estaré liando más o te servirá para algo, ya me contarás.

Gangster
13-07-2007, 18:46:42
¿No has pensado en meterlo en una caja de texto el artículo en vez de directamente en el grid?.
Me explico:
Creo que lo que haces es añadir directamente en el grid, si desabilitaras el grid con lo que te dije enabled:=false y metieras el codigo del artículo en una caja de texto y al pulsar el intro lo añadieras al objeto table, aparecería en el grid ya que esta ligado con el datasource y no podrías manipularlo, cuando dieras de alta el artículo vaciarías la caja de texto y esperaría a que le metieras otro.
No se si te estaré liando más o te servirá para algo, ya me contarás.


Hola dioni suena bien la idea pero lo que no entiendo que es una caja de texto. es mi unica duda esa si me dices que objeto es ese en ingles para buscarlo dentro de delphi lo agradeceria. Saludos y Bye.

Gangster
14-07-2007, 20:26:07
En el Evento del KeyUp del dbgrid, atrape la variable de la tecla de la flecha para arriba, la puse dentro de un if, entonces cuando el usuario teclee esa tecla, entonces entra al if que esta en el evento, y entonces lo mando al ultimo de la tabla enlazada al dataset del dbgrid (Le hago un .LAST a la tabla esa), y por ultimo le hago a esa misma tabla un append, entonces si le da para arriba en el dbgrid, pero por el evento, lo manda hacia abajo pero con el append hace un renglon nuevo en el dbgrid y el apuntador del dbgrid a la tabla se va hasta el renglon nuevo hecho dentro del DBGrid, Gracias a todos los que me ayudaron Respondiendome, Gracias por todo Saludos y Bye.