Trabajar con la dbgrid sin conectarle data

Necesito utilizar la dbgrid como si fuera una matriz sin conexión a ninguna base, quiero personalizarla completamente y agregar filas en tiempo de ejecución pero que el programa y no el data la controle

1 respuesta

Respuesta
1
El DBGrid tiene una propiedad denominada DataMode con dos valores: "Bound" y "Unbound" El valor por defecto es "Bound", esto es, enlazado a datos, y es entonces cuando un un Control Data suministra los valores. Pero si se pone en modo "unbound" eres tu responsable de rellenar y actualizar cada casilla del grid con los valores oportunos. Mirate la ayuda de esta propiedad.
Tengo la sensación de que esto resulta bastante incómodo de utilizar. La prueba es que el "Hermano mayor" del Dbgrid, que es el "True DbGrid" tiene cuatro valores posibles para la propiedad DataMode. De ellos, el cuarto, denominado "Storage", consiste en que hay una matriz de valores variant que actúa como el recordset de datos en el caso normal, esto es, actualizando los valores de la matriz se actualiza la visualización, y modificando las casillas del grid, se actualizan los valores de la matriz. Esto, que yo si he usado en ocasiones, es muy cómodo.
Te recomiendo que si puedes, te hagas con el control "True DBGrid" de Apex. Yo es prácticamente el único control fuera del standard de Visual que utilizo.
Suerte :-)
Primero donde me hago de la true grid y segundo en caso de que no pueda conseguirla de momento, he trabajado con la dbgrid en los dos modos antes mencionados y la ayuda de visual Basic lleva a por lo menos 5 acciones pero lo que no logré nunca fue aumentarlas filas de la grid en tiempo de ejecución en realidad no supe que comando poner para agregar una fila y que continuara mostrando las anteriores en otras palabras que creciera, si me dices como lograrlo te lo agradecería mucho.
True dbgrid lo puedes comprar en tiendas de software o pedirlo directamente a su fabricannte en la web:
http://www.componentone.com/
Respecto del añadido de lineas, supongo que lo que te pasa es que no has puesto la propiedad AllowAddNew a true
Tendo la propiedad AllowAddnew = true
Y en la ayuda aparecen 4 eventos relacionados que son:
UnboundAddData
UnboundDeleteRow
UnboundReadData
UnboundWriteData
En los cuatro se pasa un parámetro que es de tipo Rowbuffer.
He visto que esta uúltima matriz contiene los datos que quiero insertar y visualmente los inserta sin embargo al llegar a la fila siguiente se pierde la fila anterior y comienza nuevamente en la primera por eso me imagino quedebe haber algo que la haga crecer de tal manera que mantenga los valores anteriores si sabes como te agradecería que me dijeras
Como te decía yo no utilizo DbGrid sino TrueDbgrid, por lo que me resulta un poco difícil responderte. Como ya te había advertido el DBgrid utilizado en modo Unbound resulta bastante poco práctico.
Rebuscando en la ayuda, viene un ejemplo de como se transfiere una matriz a un DBgrid. La matriz se llama UserData y utiliza el siguiente procedimiento para llenar con ella el grid:
>>
En este ejemplo se ilustra el uso del evento UnboundReadData para leer una fila de datos de una matriz simple.
Private Sub DBGrid1_UnboundReadData(ByVal RowBuf As RowBuffer, StartLocation As Variant, ByVal ReadPriorRows As Boolean)
Dim CurRow&, Row%, Col%, RowsFetched%, Incr%
If ReadPriorRows Then
Incr% = -1
Else
Incr% = 1
End If
' Si StartLocation es Null se empieza a leer al
' principio o al final del conjunto de datos.
If IsNull(StartLocation) Then
If ReadPriorRows Then
CurRow& = RowBuf.RowCount - 1
Else
CurRow& = 0
End If
Else
' Busca la posición desde la que comenzar a
' leer según el marcador StartLocation
' y la variable lngIncr%
CurRow& = CLng(StartLocation) + Incr%
End If
' Se transfieren los datos desde la matriz de
' datos al objeto RowBuf que DBGrid usa para
' presentar los datos
For Row% = 0 To RowBuf.RowCount - 1
If CurRow& < 0 Or CurRow& >= mTotalRows& Then Exit For
For Col% = 0 To UBound(UserData, 1)
RowBuf.Value(Row%, Col%) = UserData(Col%, CurRow&)
Next Col%
' Establece el marcador usando CurRow&,
' que es también nuestro índice de matriz
RowBuf.Bookmark(Row%) = CStr(CurRow&)
CurRow& = CurRow& + Incr%
RowsFetched% = RowsFetched% + 1
Next Row%
RowBuf.RowCount = RowsFetched%
End Sub
<<
Me parece bastante demencial, pero es lo que hay.
Insisto: pásate a TrueDbGRid
Suerte :-)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas