| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Alejandro2005 Cdt

Registrado: 24 Nov 2005Mensajes: 7Ubicación: Córdoba - Argentina
|
Publicado: Sab 08 Abr, 2006 1:03 am Asunto: Como saber el nro de registros visibles en un DBGrid |
|
|
| 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 |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 10 Abr, 2006 5:13 pm Asunto: |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Lun 10 Abr, 2006 8:16 pm Asunto: |
|
|
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 |
|
 |
Alejandro2005 Cdt

Registrado: 24 Nov 2005Mensajes: 7Ubicación: Córdoba - Argentina
|
Publicado: Lun 10 Abr, 2006 10:38 pm Asunto: |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mar 11 Abr, 2006 1:54 am Asunto: |
|
|
| 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 |
|
 |
Alejandro2005 Cdt

Registrado: 24 Nov 2005Mensajes: 7Ubicación: Córdoba - Argentina
|
Publicado: Mar 11 Abr, 2006 11:49 am Asunto: |
|
|
| 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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mar 11 Abr, 2006 9:04 pm Asunto: |
|
|
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 |
|
 |
Alejandro2005 Cdt

Registrado: 24 Nov 2005Mensajes: 7Ubicación: Córdoba - Argentina
|
Publicado: Mie 12 Abr, 2006 3:15 am Asunto: |
|
|
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 |
|
 |
|