DATAGRID O FLEXGRID??????
Necesito mostrar datos (que provienen de un recordset) en una grilla, datagrid o flexgrid (eso me dirán uds.) y que el usuario pueda hacer doble click en cualquier parte de una fila, y que el dato que figura en la primer columna de esa fila se almacene en una variable.
Es posible esto???? en caso contrario...... ¿qué otra solución proponen?
Les agradecería mucho que me contesten. Hasta siempre
Es posible esto???? en caso contrario...... ¿qué otra solución proponen?
Les agradecería mucho que me contesten. Hasta siempre
te recomiendo que uses un dbgrid y en el evento dblclick() pongas lo siguiente
variable = dbgrid1.colums(0)
variable = dbgrid1.colums(0)
Te propongo que utilices mejor el List-view en modo Report, si es que la grilla que quieres mostrar no requiere edición manual celda a celda. El control list-view te proporciona la colección ColunmHeaders para definir las columnas, deberás configurarlas antes que nada:
listview1.view= lvwReport
listview1.columnheaders.add ,,"Columna1"
listview1.columnheaders.add ,,"Columna2"
listview1.view= lvwReport
listview1.columnheaders.add ,,"Columna1"
listview1.columnheaders.add ,,"Columna2"
Perdón, se me ha escapado.
Te propongo que utilices mejor el List-view en modo Report, si es que la grilla que quieres mostrar no requiere edición manual celda a celda. El control list-view te proporciona por un lado la colección ColunmHeaders para definir las columnas, y por el otro la colección ListItems para definir las filas. Primero deberás configurar las columnas del list-view:
listview1.view = lvwReport
listview1.columnheaders.add ,,"Columna1"
listview1.columnheaders.add ,,"Columna2"
para cada columna correspondiente a los campos de la consulta que desees mostrar.
Luego abres el objeto ADODB.Recordset que utilices y en un bucle que recorra los registros añades las filas de la siguiente manera:
Dim oItem as ListItem
Te propongo que utilices mejor el List-view en modo Report, si es que la grilla que quieres mostrar no requiere edición manual celda a celda. El control list-view te proporciona por un lado la colección ColunmHeaders para definir las columnas, y por el otro la colección ListItems para definir las filas. Primero deberás configurar las columnas del list-view:
listview1.view = lvwReport
listview1.columnheaders.add ,,"Columna1"
listview1.columnheaders.add ,,"Columna2"
para cada columna correspondiente a los campos de la consulta que desees mostrar.
Luego abres el objeto ADODB.Recordset que utilices y en un bucle que recorra los registros añades las filas de la siguiente manera:
Dim oItem as ListItem
Sigo, lo siento, es la costumbre de tabular.
Decía, añades fila a fila cada registro en el list-view de la siguiente manera:
Dim oItem as ListItem
' Asumimos RecSet como el objeto Recordset a utilizar, abierto y con registros:
RecSet.MoveFirst
do
'Inserción de la fila al list-view:
set oItem= ListView1.ListItems.Add ,,""
' Primera Columna:
oItem.Text = "" & RecSet.Fields("Columna1").Value
' (insertar una cadena en blanco delante del valor del campo evitará un error si el valor es nulo)
' Segunda Columna:
oItem.SubItems(1) = "" & RecSet.Fields("Columna2").Value
' etc
RecSet.MoveNext
loop until RecSet.EOF
El evento ItemClick del ListView te proporciona como parámetro el Item que el usuario clickea. Accederás a la primera columna simplemente con la propiedad
Item.Text
Fuera del evento ItemClick, puedes acceder a ella con
ListView1.SelectedItem.Text
por ejemplo, desde el evento ListView1_DobleClick (que no es sensible a la fila, si no al control entero).
Cabe considerar que las colecciones SubItems y ListSubItems que pertenecen a los objetos ListItem, se refieren siempre a partir de la segunda columna. Nótese que
<ListItem>.SubItems(1)
equivale a
<ListItem>.ListSubItems(1).Text
y se refiere a la celda de la segunda columna. La primera columna siempre es
<ListItem>.Text
Consulta la ayuda de estas colecciones y del control, verás que ofrecen bastantes posibilidades. Otro truco: cuando llenes el list-view de datos, hazlo invisible antes hasta que termine el bucle, irá muchísimo más rapido si el recordset es relativamente grande. Un saludo.
Decía, añades fila a fila cada registro en el list-view de la siguiente manera:
Dim oItem as ListItem
' Asumimos RecSet como el objeto Recordset a utilizar, abierto y con registros:
RecSet.MoveFirst
do
'Inserción de la fila al list-view:
set oItem= ListView1.ListItems.Add ,,""
' Primera Columna:
oItem.Text = "" & RecSet.Fields("Columna1").Value
' (insertar una cadena en blanco delante del valor del campo evitará un error si el valor es nulo)
' Segunda Columna:
oItem.SubItems(1) = "" & RecSet.Fields("Columna2").Value
' etc
RecSet.MoveNext
loop until RecSet.EOF
El evento ItemClick del ListView te proporciona como parámetro el Item que el usuario clickea. Accederás a la primera columna simplemente con la propiedad
Item.Text
Fuera del evento ItemClick, puedes acceder a ella con
ListView1.SelectedItem.Text
por ejemplo, desde el evento ListView1_DobleClick (que no es sensible a la fila, si no al control entero).
Cabe considerar que las colecciones SubItems y ListSubItems que pertenecen a los objetos ListItem, se refieren siempre a partir de la segunda columna. Nótese que
<ListItem>.SubItems(1)
equivale a
<ListItem>.ListSubItems(1).Text
y se refiere a la celda de la segunda columna. La primera columna siempre es
<ListItem>.Text
Consulta la ayuda de estas colecciones y del control, verás que ofrecen bastantes posibilidades. Otro truco: cuando llenes el list-view de datos, hazlo invisible antes hasta que termine el bucle, irá muchísimo más rapido si el recordset es relativamente grande. Un saludo.
