Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Numero de ítem en dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=77706)

gianfranco_tont 21-02-2012 19:28:26

Caral, no entiendo lo del querytemp cual serria para mis el querytemp? Y en donde coló esta sentencia?

Caral 21-02-2012 19:30:19

Hola
Un query nuevo, otro query mas que normalmente yo uso para varias cosas, por eso lo llamo temporal.
Simplemente esta enlazado a la BD y se le asigna la labor que se quiera.
El codigo lo pones en el evento oncellclick del dbgrid.
Saludos

gianfranco_tont 21-02-2012 22:03:56

Me da un error de access violation al hacer click en el grid, lo coloque en el evento dbgrid1cellclick.

Caral 21-02-2012 22:15:52

Hola
No se que estas haciendo, lógicamente.
Me da la impresión, a ojo, que lo tendrías que hacer en el evento o procedimiento que crea una nueva linea al dbgrid, que es cuando necesitas que se cree un nuevo numero para el item.
Saludos

olbeup 22-02-2012 09:32:12

Hola gianfranco_tont

En tu SQL al principo pon un campo como el siguiente y después te diré para que es:
Código SQL [-]
SELECT
    0 AS NUMITEM <-- Este es el que vamos a modificar con el RecNo del DBGrid
    ,CAMPO1  |
    ,CAMPO2  | --> Esto son tus campos de la DB
    ,CAMPOX  |
    ,....
Después en el DrawColumnCell del DBGrid tienes que poner esto:
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  FieldText: String;
  W: Integer;
begin
  if (DataCol = 0) then
    with DBGrid1.DataSource.DataSet do
      FieldText := IntToStr(RecNo);

  with DBGrid1 do
    if (DataCol = 0) then
    begin
      W := ((Rect.Right - Rect.Left) - Canvas.TextWidth(FieldText));
      DefaultDrawing := True;
      Canvas.FillRect(Rect);
      Canvas.TextOut(Rect.Left + W -2, Rect.Top +2, FieldText);
    end
    else
      DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Espero haberte orientado.

Un saludo.

ecfisa 23-02-2012 00:54:07

Hola gianfranco_tont.

En referencia a tu primer consulta:
Cita:

Hola foro, tengo un dbgrid con un clientdataset y lo que quiero hacer es que las filas se autonumeren, ejemplo. Cuando se crea una linea nueva en el grid que sea la 01 la siguen la 02 etc.
Creo que la opción más sencilla es que en el TClientDataSet, crees un campo calculado de tipo string (en el ejemplo lo llamo ClientDataSet1RecNo), mediante el Field Editor, ubícalo en el primer lugar de la lista de campos.

Luego en el evento OnCalcFields del TClientDataSet:
Código Delphi [-]
procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
const
   NCEROS = 2; // Cantidad de ceros a la izquierda
begin
  with ClientDataSet1 do
    ClientDataSet1RecNo.AsString:= StringOfChar('0', NCEROS-Length(IntToStr(RecNo))) + IntToStr(RecNo);
end;
end;
Ese código dá exáctamente el resultado que solicitas.

Lógicamente es necesario que la propiedad DataSource del TDBGrid haga referencia al TDataSource que apunta al TClientDataSet.

Saludos.


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

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