Desarrollo 31 de Julio del 2005 03:20 am
Permitir seleccionar uno o mas registros en el grid (VFP 8 y 9)
Cuantas veces hemos deseado tener un grid, que nos permita seleccionar
varios registros a la vez, como si fuera un listbox o algo similar, hasta ahora yo lo venia haciendo con un checkbox pero eso se acabo!!!
Esta vez, les presento la clase iGrid, la cual consta de 2 objetos
iGrid
ioGrid
iGrid: Es una clase basada en grid, capaz de permitir seleccionar múltiples registros.
ioGrid: Es una clase basada en Custom, que nos permite dotar a cualquier grid de selección múltiple
Las propiedades que debemos establecer normalmente son:
icColorNoSeleccionado Deberá establecerse a un número valido de color o a una cadena como Rgb(#Color,#Color,#Color), y sirve para indicar el color de fondo que tendrán los registros que no sean seleccionados.
icColorSeleccionado Deberá establecerse a un número valido de color o a una cadena como Rgb(#Color,#Color,#Color), y sirve para indicar el color de fondo que tendrán los registros que sean seleccionados.
inSelectorMod Debe establecerse al valor de la tecla que queremos utilizar como modificadora para permitir la selección, los posibles valores son:
0 &&Ninguna Tecla.
1 &&Se debe presionar SHIFT para seleccionar.
2 &&Se debe presionar CTRL para seleccionar.
4 &&Se debe presionar ALT para seleccionar.
También es posible indicar una o mas teclas sumando los valores, de tal manera que un valor 3, indicaría que se deben presionar las teclas CTRL+SHIFT para poder seleccionar/Deseleccionar un registro.
nTeclaSeleccion Se debe establecer al #ASCII de la tecla que se desea asignar, el valor predeterminado es 32 (Barra Espaciadora) aunque podría ser cualquier otro, como 13 (Enter).
El objeto ioGrid contiene una propiedad adicional: “oGrid” y como es de suponer, sirve para indicar el nombre del grid al cual queremos agregar la funcionalidad de Selección múltiple.
Ambos objetos proporcionan un método llamado ObtenerSeleccion el cual espera 3 parámetros:
cField,cCursor,lNoSelect
cField, espera recibir el nombre de los campos a obtener en el cursor resultante (si no se indica ninguno se utilizaran todos (*)).
cCursor, indica el nombre del cursor que se generara con los elementos indicados.
lNoSelect, si lo que se necesita son los elementos que no han sido seleccionados, este parámetro debe establecerse en .T. para que así se obtengan los elementos no seleccionados, si no se envía un valor a este parámetro, se creara el cursor con los registros seleccionados.
El Método Seleccionar, podemos invocarlo con un parámetro, el cual es el número de registro (Recno()) que queremos seleccionar.
Pueden bajar la clase desde acá: iGrid.Zip
Para ver el video de que hace exactamente la clase, dar clic a: Video iGrid
Saludos!
30 personas han dicho algo en “Permitir seleccionar uno o mas registros en el grid (VFP 8 y 9)”
Suscribete a los comentarios de este post
Vea también:
on 23 Ago 2005 at 14:57 1.jose
dijo …
detalle del grid en un sistem de factu
on 18 Jul 2006 at 10:12 2.Raul Iraola
dijo …
Buen Dia.
Estuve probando su clase expuesta sobre el igrid y me parece una clase muy util para lo que necesito en el trabajo hasta cierto punto,es bastante util el poder seleccionar varios registros a la vez, pero en vez de pasarlos a un cursor nose si me podria facilitar la forma de como hacer que esos registros seleccionados se puedan copiar y poder pegarlos en excel…
ojala me pueda responder esa consulta ya que es muy util para mi.
gracias de antemano
on 18 Jul 2006 at 13:58 3.Jorge Mota
dijo …
lo único que necesitas hacer es una vez obtenido el cursor con los elementos seleccionados es ejecutar esta instrucción.
_vfp.DataToClip(”CursorElementos”)
donde CursorElementos es el cursor que te genero tu grid.
Saludos
on 31 Ene 2007 at 7:41 4.gerbert
dijo …
si necesitase selecionar todos los registros de una sola vez y al hacer click en x numero de registros deseccionar algunos para poder ver todos los registro selecionados, tipo Ctrl + A para selecionar todos y Ctrl + Click izq. para deselecionar, se pude hacer.
on 31 Ene 2007 at 10:32 5.Jorge Mota
dijo …
puedes hacerlo, lo único que necesitarías es programar el keypress de tu grid y recorrer el objeto collection para seleccionar todos los registros.
lo segundo no lo entendí
Saludos.
on 31 Ene 2007 at 11:14 6.gerbert
dijo …
bien a lo que me referia es por ejemplo en excel se presionan la conbinacion Ctrl + a para selecionar toda la hoja y si deseo quitar la selecion a algunas filas o columnas de la misma presiono Ctrl y al mismo tiempo el click izquierdo del mouse. se podria realizar la misma operacion en la clase gris que expones.
on 31 Ene 2007 at 11:22 7.Jorge Mota
dijo …
creo que bastaría que veas el comportamiento del segundo grid para lo de CTRL + Clic sumado a eso, faltaría programar un metodo “SelectAll()” para la clase que tendrías que invocar con CTRL + A.
y ya lo tendrías todo listo.
pero recuerda que solo puedes seleccionar filas completas, no celdas de una fila sí y otras no
on 31 Ene 2007 at 11:30 8.Jorge Mota
dijo …
bajate el ejemplo sí no lo has hecho ya y ve el segundo grid ( el que esta abajo )
Con respecto al código de CTRL + A para seleccionar
Para programar un método SelectAll() usando la clase iGrid (Basada en grid) bastaría con colocar algo como esto:
usando la clase ioGrid (basado en Custom)
Saludos.
on 03 Jul 2007 at 11:04 9.Andrey
dijo …
Hola…
Me gusta mucho… Felicitaciones.
Apenas ahora lo estoy tratando de acomodar a una necesidad propia, pero me encuentro con un problemita.
La clase custom solo considera como fuente del objeto grid, que el contenedor sea un formulario, en mi caso, lo estoy tratando de utilizar en un grid cuyo contenedor es un page… y no me deja avanzar, estoy tratando de buscar la forma de resolverlo, pero si me pueden empujar, puedo llegar mas rapido.
Gracias.
on 03 Jul 2007 at 11:09 10.Jorge Mota
dijo …
dejame revisar el código y te comento a ver que pasa
on 03 Jul 2007 at 11:15 11.Jorge Mota
dijo …
a mi me está funcionando bien metiendo el objeto custom y el grid en la misma página :), intenta hacer lo mismo, que el custom y el grid, sean hijos del mismo padre. también puedes cambiar el método init de la clase ioGrid para que en lugar de siempre hacer
.oGrid = Evaluate([this.Parent.]+This.oGrid)
realize algo como
if [.]$ this.oGrid
.oGrid = evaluate(This.oGrid)
else
.oGrid = Evaluate([this.Parent.]+This.oGrid)
endif
de esa manera podrías tener en this.oGrid al init, “Thisform.pageframe.page2.grdConsulta” por poner un ejemplo.
on 03 Ago 2007 at 10:17 12.VICO
dijo …
Mmmmm… pues la verdad es que soy nuevo en esto y no se como utilizar esta clase, añadí un objeto a mi formulario basado en la clase igrid y luego añadí el objeto ogrid, pero marca un error a la hora de ejecutarlo es decir no encuentra el objeto .ogrid, lo marca como .F. Me puedes ayudar y decirme en que estoy fallando GRACIAS
on 03 Ago 2007 at 10:25 13.Jorge Mota
dijo …
Solo tienes que agregar al objeto que agregaste (oGrid) en la propiedad ogrid el nombre de tu grid, algo así como “GrdFacturas” o “grid1″, etc.
on 21 Sep 2007 at 7:36 14.Diego
dijo …
Se pùede con esta clase poder acceder a las propiedades de una fila especifica sin tener que seleccionarla? como?. Lo que yo necesito haces es cambiar el color de fondo de varias celdas que necesite
Saludos
on 21 Sep 2007 at 7:41 15.Jorge Mota
dijo …
Con el grid de vfp no puedes indicar propiedades individuales a cada fila, pero si lo que quieres es poner x Color para las filas que cumplan una condición este artículo te puede servir:
http://www.portalfox.com/article.php?sid=1829
Saludos Diego.
on 21 Sep 2007 at 7:53 16.Diego
dijo …
Jorge: muchas gracias por responder. Me pareció muy util el articulo, lo unico que veo es que ahi le cambian el color a toda la fila, no sabes si podré hacer que cambie el color a una única celda, por ejemplo 7B, 9B, 11B, sin necesidad de cambiarle todo el color a la fila?.
Saludos
on 21 Sep 2007 at 8:14 17.Jorge Mota
dijo …
Mira en lugar de hacer SetAll podrías hacer
thisform.grid.column1.dynamiccolor = ….
pero de la forma que tú indicas no es posible hacerlo con el grid de vfp, podrías probar con algún grid activeX como los que usan los de Visual Basic.
on 26 Sep 2007 at 11:21 18.VICO
dijo …
Tengo un pequeño problemita que no me deja continuar, no se refiere al de selección de varias filas de un grid, el método usado me ha funcionado bien.
Con respecto al problema que tengo, es: tengo declarado un campo de tipo Memo
CREATE TABLE myTable(campomemo M)
Pero al llenarlo de información… la longitud que adquiere toda la info es de 255 (máximo). Lo cual hace que corte la información extensa que quiero visualizar.
De antemano GRACIAS
on 15 Oct 2007 at 9:35 19.JoRgE
dijo …
Hola, la verdad se me hace interensante la clase que has desarrollado, la puse en una aplicacion que estoy desarrollando pero he tenido un pequeño problema, y quisiera ver si me puedes ayudar, ya tenia definido el grid y estoy usando tu clase con el iogrid, el problema es que al intentar seleccionar un registro, me sale el siguiente mensaje “no se encuentra el alias” estoy intentando seleccionar con el Ctrl y Click dell mouse.
de antemano te agradezco tu ayuda.
on 15 Oct 2007 at 11:02 20.Jorge Mota
dijo …
@Jorge: podrías decirme si el recordsource de tu grid, está establecido ? debería poner el nombre del cursor con el que quieres trabajar.
on 15 Oct 2007 at 16:02 21.JoRgE
dijo …
Hola Jorge … somos tocayos..
Mira el grid que utilizo se llena con una seleccion de datos, el curso se llama “quebienes”, este nombre lo tengo puesto en el recordsource, y dicho cursor puede ir cambiando dependiendo de la selecciones que se hagan, estoy programando en visual fox 9.
en la pestaña de datos tengo
recordsource “quebienes”
recordsourcetype “1. Alias”
mi grid se llama grid1
la clase que estoy usando es la iogrid
en la pestaña otros del iogrid tengo puesto
iogrid “grid1″
algun detalle que no haya puesto?
desde ya gracias por tu antencion…
on 15 Oct 2007 at 16:04 22.Jorge Mota
dijo …
mmm pues no se me ocurre nada más que podría estar pasando, te mando un correo a ver si te puedo ayudar en algo
on 15 Oct 2007 at 16:26 23.JoRgE
dijo …
Ok Jorge ..
mi correo es jrvs06@yahoo.com.mx
on 18 Oct 2007 at 7:37 24.Blado dijo …
tengo un problema al jalar la clase me sale un mensaje que hace referencia al metodo collection, porfa podrias explicarme como solucionar este mensaje….gracias
on 18 Oct 2007 at 15:10 25.Jorge Mota
dijo …
Necesitas VFP 8 o superior. ya que las versiones 7 y menores no poseen el objeto “collection”
on 13 Dic 2007 at 16:20 26.Germán dijo …
Hola Jorge…
Te comento, que suy nuevo en el uso de FOX 9, apenas estoy aprendiendo por mi cuenta y ´me encontré tu class. MUY INTERESANTE Y UTIL.
Estoy haciendo pruebas con tu class para aprender a manejarlo (Para mí es aún complicado), pero te pregunto si es factible que solo lo que seleccione en el grid superior se vaya mostrando en el grid inferior? como se haría?
Si es posible y no es un descaro de mi parte, tienes un pequeño ejemplo de esto a la mano.
Mil y mil gracias.
on 16 Ene 2008 at 13:36 27.mario
dijo …
HOLA JORGE:
Estoy utilizando la clase iogrid, pero no me colorea los renglones seleccionados, uso VFP9.
de antemano gracias, es una clase muy util
ATTE
MARIO
on 16 Ene 2008 at 14:18 28.Jorge Mota
dijo …
Que valor tienes en la propiedad HighlightStyle y en HighLightRow.
También debes revisar las 2 propiedades de la clase
icColorSeleccionado
icColorNoSeleccionado que tengan un valor del estilo rgb distinto cada uno
Que valores tienes en la clase en estas 2 propiedadeS?
on 16 Ene 2008 at 16:39 29.Mario
dijo …
HOLA JORGE
estos son los valores en la clase
icColorSeleccionado : rgb(255,0,0)
icColorNoSeleccionado: rgb(255,255,255)
en el Grid
HighlightStyle: 0
HighLightRow: .T.
on 12 Feb 2008 at 13:44 30.Miguel Gámez
dijo …
Hola Jorge:
Tu articulo me sirvió muchisimo, ahora tengo otro problema, quiero rellenar el grid mediante una consulta SQL, por lo que tengo que poner el RecordSourceType= 4 SQL Statement, y al querer seleccionar multiples registros me aparece el error: Alias is not found. como le puedo hacer?, de antemano gracias por compartir tus conocimientos.