Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Como saber el nro de registros visibles en un DBGrid

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Como saber el nro de registros visibles en un DBGrid Responder citando

Hola, como puedo obtener la cantidad de registros visibles en un DBGrid. El mismo esta asociado a traves de un DataSource con TQuery. Gracias!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Puedes hacerlo de esta forma:

Código:

      int NumRegs:
      NumRegs = DBGrid1->DataSource->DataSet->RecordCount;
      ShowMessage(IntToStr(NumRegs));


Saludos
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Creo que se refiere a cuantos registros estan VISIBLES, (creo)

si es asi, me imagine qeu scando el alto (heigh) de la fila y diviendodo el Height total de dbgrid - (menos) el alto del encabezado, daria la cantidad de registros visibles en el grid.

RegistrosVisibles=(Grid.Alto-Grid.Encabezado.Alto)/Grid.Celda.Alto

Algo asi, no le veo la utilidad (bueno no me imagino, pero comenta plz)

Saludos y suerte
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Pimero gracias por su atención y su tiempo. Les explico un poco mas lo que quiero lograr. Tengo un form con DBGrid asociado a un Tquery y deseo desplazarme por los registros utilizando el teclado. Si bien esto se logra sin problemas cuando el foco del programa se encuentra sobre el DBGrid, cuando este lo pierde, tengo que recurrir a el evento Keydown del formulario para obtener el mismo resultado.
Para desplarme registro por registro uso el codigo de las teclas de direccion y el metodo Next del Tquery, pero cuando uso las telcas PgUp y PgDown necesito conocer la cantidad de registros visibles en ese momento en el DBGrid, el cual varia segun el tamaño del mismo. A este ultimo problema iva dirigida mi pregunta.
Espero que se halla entendido. Nuevamente gracias a ambos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Código:

int FilasVisiblesGrid(TDBGrid *DBGrid2)
{
int iAltoLetraTitulo=0;
int iAltoLetraFila=0;
int iAltoGrid=0;
iAltoLetraTitulo=-1*DBGrid2->TitleFont->Height;
iAltoLetraFila=-1*DBGrid2->Font->Height;
iAltoGrid=DBGrid2->Height;
return(iAltoGrid-2*(iAltoLetraTitulo+6))/(iAltoLetraFila+6);
}


lo hice hce 10 minutos ,lo probe y dio resultados aceptables, mejoralo y repostealo porfa.

te fijas que hay un +6?

Bueno calcule a ojo de buen cubero 3 pixeles arriba de cada letra y 3 abajo, por eso calculo el ancho de la fila como anch de la letra +6 , incluyendo los titulos (aqui debe ser un avalor ligeramente mayor)

Investiga cuales son las longitudes por defauly mejora la funcion

Saludos
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Me voy a poner a mejorar la funcion que me pasaste, pero te comento que en la clase TDataSet existe una propiedad llamada BufferCount, que contiene el numero de registros almacenados en el buffer de un dataset. El problema que esta debe ser una propiedad privada ya que no me deja acceder a su contenido.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si , y ahabia visto, la otra forma es que derives el TDbGris en un Ibjeto propio y dejes las varibale sprivadas como publicas..peor en lo personal seme hizo demasiado rollo..pero bueno..hay ejemplos en deplhi de como hacerlo..

Busca "DBGrid Row Visible" en Santo Gogle

si te decides pr esa opcion
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Aca posteo una clase que arme para obtener la porpiedad BufferCount de la Clase TDataLink, la cual contiene el numero de registros visible en un TDBGrid. Seguramente existe una solucion mejor, ya que con esta clase solo duplico el objeto de la clase TDBGrid.
En el encabezado, el codigo es el siguiente:
//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
#include <Classes.hpp>
#include <DBGrids.hpp>
//---------------------------------------------------------------------------
class TVisRow : private TCustomDBGrid
{
private:

void __fastcall SetGrid(TDBGrid *DBGrid);
int __fastcall LeerBuffer(void);
TDBGrid * db;
public:
__fastcall TVisRow();
__property TDBGrid * DBGrid={write=SetGrid};
__property int BufferCount={read=LeerBuffer};
};
#endif

en el *.cpp el codigo es el que sigue:

//---------------------------------------------------------------------------
#pragma hdrstop
#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

__fastcall TVisRow::TVisRow()
:TCustomDBGrid(Owner)
{
}
void __fastcall TVisRow::SetGrid(TDBGrid *DBGrid)
{
db =DBGrid;
}
int __fastcall TVisRow::LeerBuffer(void)
{
int Bf;
this->TitleFont =db->TitleFont;
this->Font =db->Font;
this->DataSource =db->DataSource;
this->Parent = db->Parent ;
this->Height = db->Height;
this->Width = db->Width;
Bf=this->DataLink->BufferCount;
this->Visible =false;
return(Bf);
}


Para usar la clase hay que crear el objeto y setear la propiedad DBGrid con un objeto TDBGrid. Luego leer la propiedad BufferCount para obtener el numero de registros visbles en el DBGrid. Porbala y quedo a la espera de las criticas.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.