Jump to content


Photo

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


  • Please log in to reply
6 replies to this topic

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 15 May 2009 - 10:40 AM

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 posts
  • LocationDistrito Federal

Posted 15 May 2009 - 11:16 AM

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
  • 7419 posts
  • LocationRepública Dominicana

Posted 15 May 2009 - 11:44 AM

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
  • 14448 posts
  • LocationMéxico

Posted 15 May 2009 - 11:53 AM

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 posts
  • LocationDistrito Federal

Posted 15 May 2009 - 01:03 PM


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
  • 7419 posts
  • LocationRepública Dominicana

Posted 15 May 2009 - 01:17 PM

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
  • 775 posts
  • LocationPinar del Río, Cuba

Posted 02 July 2009 - 02:09 PM

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




IP.Board spam blocked by CleanTalk.