Ir al contenido


Foto

¿Cómo crear una columna de numeración continua en DBGrid?


  • Por favor identifícate para responder
6 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 15 mayo 2009 - 10:40

Pues eso, ¿quisieras tener una columna en el DBGrid con una Numeración continua sin depender de una consulta o BD en un DBGrid?, pues aquí­ la solución:

Creamos una columna en el DBGrid y no le asignamos ningún campo, en el caption (Title) le ponemos el nombre de "No.", luego en el evento OnDrawColumnCell del DBGrid colocamos éste sencillo código:



delphi
  1. procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  2.   DataCol: Integer; Column: TColumn; State: TGridDrawState);
  3. begin
  4. if DataSource1.DataSet.RecNo > 0 then
  5.   begin
  6.     if Column.Title.Caption = 'No.' then
  7.       DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(DataSource1.DataSet.RecNo));
  8.   end;
  9. end;



Y obtendrán un resultado como éste:
  • 0

#2 Faust

Faust

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 213 mensajes
  • LocationDistrito Federal

Escrito 15 mayo 2009 - 11:16

Alguna vez intenté algo así­ con interbase, y la función RecNo del Dataset siempre me devolví­a cero  :(
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 15 mayo 2009 - 11:44

Alguna vez intenté algo así­ con interbase, y la función RecNo del Dataset siempre me devolví­a cero  :(


Ah vaya, ¿cómo pudiste resolver ese problema?.

Saludos.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.187 mensajes
  • LocationMéxico

Escrito 15 mayo 2009 - 11:53

Alguna vez intenté algo así­ con interbase, y la función RecNo del Dataset siempre me devolví­a cero  :(


Para que puedas obtener el RecNo de Interbase debes de hacer un Last y ya te muestra el número de registros, lo que está haciendo el DBGrid es eso mismo al cargar todos los registros del dataset, por eso es que se ven los indices.

Salud OS
  • 0

#5 Faust

Faust

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 213 mensajes
  • LocationDistrito Federal

Escrito 15 mayo 2009 - 01:03


Alguna vez intenté algo así­ con interbase, y la función RecNo del Dataset siempre me devolví­a cero  :(


Ah vaya, ¿cómo pudiste resolver ese problema?.

Saludos.


Mi intención era hacer un navegador de registros como el que tiene Access en la parte de abajo de las tablas, ese que tiene un botón de "Primero", "Anterior", un cuadro de texto indicando la posición (p. ej. Registro 3 de 24), "Siguiente", "íšltimo" e "Insertar", ya he hecho esto con SQL Server y ADO sin ningún problema, pero quisé implementarlo en Interbase pero RecNo y RecordCount me regresaba a veces cero y a veces el valor real. Como necesitaban con urgencia la aplicación pues ya no lo resolví­ y no le pusé esta parte.
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 15 mayo 2009 - 01:17

Hice lo siguiente:



delphi
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. begin
  3. ZTable1.Prior;
  4. Edit1.Text := IntToStr(ZTable1.RecNo);
  5. end;
  6.  
  7. procedure TForm1.Button3Click(Sender: TObject);
  8. begin
  9. ZTable1.Next;
  10. Edit1.Text := IntToStr(ZTable1.RecNo);
  11. end;



Y pues el asunto me funciona perfectamente, claro, en este caso usé Zeos y MySQL, luego lo pruebo con Firebird e IBX.

Saludos.
  • 0

#7 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 753 mensajes
  • LocationPinar del Río, Cuba

Escrito 02 julio 2009 - 02:09

Mi intención era hacer un navegador de registros como el que tiene Access en la parte de abajo de las tablas, ese que tiene un botón de "Primero", "Anterior", un cuadro de texto indicando la posición (p. ej. Registro 3 de 24)


Pues yo hice algo parecido, un poco apurado tambien, pero funcionó y así­ lo dejé, tal vez se pueda "retocar" un poco



delphi
  1. procedure TfrmAnexo1.ActReg;
  2. begin
  3. RegNo.Text:=IntToStr(BDModulo.TablaAnexo1.RecNo);
  4. RegTot.Text:=IntToStr(BDModulo.TablaAnexo1.RecordCount);
  5. end;



Y en cada opcion que mueva el cursor  de la BD, hago el llamado a ActReg

  • 0