2009-03-23 56 views

Respuesta

5

No estoy seguro si entiendo su pregunta, pero intentaré una respuesta y quizás pueda aclarar si esto no es lo que está preguntando.

Dado que un TDBGrid está vinculado a un DataSource, la fila actual es la misma que la fila actual en el origen de datos. Puede consultar DataSource, ya sea mirando un valor de clave principal o la propiedad RecNo para determinar qué registro es el actual.

0

Si no desea depender de la fuente de datos para proporcionar un recuento de registros y un registro actual (por ejemplo, porque está utilizando un cursor unidireccional en un servidor remoto), entonces la técnica de acceder a las propiedades de la control de rejilla subyacente se puede utilizar.

Consulte this answer para una pregunta similar sobre StackOverflow.

+0

Comenzó a decir lo correcto, pero el enlace que indicó solo muestra cómo obtener el registro, pero el más importante (RecNo o Fila o CurrentRow, etc.) no se puede obtener directamente de la cuadrícula. Lo siento –

+0

@Carlos: ¿Qué impide que escriba 'Row: = TDummyGrid (MyDBGrid) .Row' en lugar de' RowCount: = TDummyGrid (MyDBGrid) .RowCount'? Se requiere un poco de reflexión, ya sabes ... – mghie

+0

Bueno ... Quiero mostrar colores alternativos en mi cuadrícula, pero la propiedad ROW no es "persistente" entre los cambios del cursor, es decir, si mueves el cursor arriba o abajo en la cuadrícula, cambiando la selección, la propiedad FILA cambia para TODAS las filas visibles al mismo tiempo. Necesito una manera de identificar cada línea individualmente, independientemente de la fila seleccionada actual. Ahora estoy usando el RecNo del conjunto de datos vinculado, pero en conjuntos de datos unidireccionales, esta propiedad es inútil. Como puede ver, SE REQUIERE UN POCO DE PENSAMIENTO, PERO USTED era el flojo. Lo siento ... –

4

Puede hacerlo de esta manera:

1 - Definir una clase local que es una copia de TDBGrid (esto le permitirá acceder a los métodos privados):

type 
    THackDBGrid = class(TDBGrid); 

2 - A continuación, puede emitir a su clase definida localmente, y tire de los métodos privados como en:

function TfrmMain.GetFieldValue(colnum : integer): string; 
begin 
    Result := THackDBGrid(grdMain).GetFieldValue(colnum); 
end; 

O, para obtener la fila #:

function CurrentRowNumber: integer; 
    Result := THackDBGrid(grdMain).Row; 
end; 

Esta técnica es útil en otras situaciones, también, pero no puedo reclamar el crédito. I got it from here.

Cuestiones relacionadas