Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Pasar datos desde un Textbox hacia un FlexGrid

Estas en el tema de Pasar datos desde un Textbox hacia un FlexGrid en el foro de Visual Basic clásico en Foros del Web. Hola amigos! De nuevo yo, con otra duda sobre Visual En esta ocasión me gustaría saber si existe la posibilidad de pasar datos desde un ...
  #1 (permalink)  
Antiguo 20/11/2009, 20:56
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 0
Pasar datos desde un Textbox hacia un FlexGrid

Hola amigos! De nuevo yo, con otra duda sobre Visual En esta ocasión me gustaría saber si existe la posibilidad de pasar datos desde un Textbox hacia un MSFlexGrid o MSHFlexGrid.
Como una imagen vale más que mil palabras, les dejo un ejemplo de lo que quiero hacer.

img26.imageshack.us/img26/139/capturaz.png


Me gustaría poder agregar tantos datos como uno quisiera. Algo como esto:

img262.imageshack.us/img262/1130/capturaj.png


Funcionaría mas o menos como una factura de venta.

¿Hay alguna posibilidad de hacer esto?

Desde ya, muchas gracias por su ayuda!
  #2 (permalink)  
Antiguo 21/11/2009, 01:27
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

Hola:

La opcion mas practica es la TextMatrix del MsFlexgrid:

Pasar datos del Grid al TextBox

TextBox1 = MSFlexgrid.TextMatrix(Fila,Columna)

Pasar datos del TextBox al Grid

MSFlexgrid.TextMatrix(Fila,Columna) = TextBox1

Prueba y ya contarás.

Respecto a las imágenes de tu mensaje yo no consigo verlas, no se si es porque está mal insertadas o es problema mio.

Saludos
  #3 (permalink)  
Antiguo 21/11/2009, 14:30
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

¡Muchas gracias por tu respuesta, erbuson! Antes que nada, te comento que para ver las imágenes debes copiar y pegar los enlaces en la barra de tu navegador.

En cuanto al código, ha funcionado correctamente. Pero lo que no puedo lograr es lo que muestro en la segunda imagen. Es decir, agregar múltiples elementos al MSFlexGrid, uno por uno.

Puedo agregar elementos desde un TextBox utilizando el siguiente código que me proporcionaste, con algunas modificaciones.
Código:
MSFlexGrid1.Cols = 6
MSFlexGrid1.Rows = 10

i = 0
i = i + 1
MSFlexGrid1.TextMatrix(i, 0) = i
MSFlexGrid1.TextMatrix(i, 1) = Text2
MSFlexGrid1.TextMatrix(i, 2) = Text6
MSFlexGrid1.TextMatrix(i, 3) = Text4
MSFlexGrid1.TextMatrix(i, 4) = Text3
MSFlexGrid1.TextMatrix(i, 5) = Combo1
Pero luego, si modifico los valores de los TextBox y los agrego al MSFlexGrid se reemplaza lo que ya había agregado con anterioridad al MSFlexGrid. Cuando en realidad, la idea es colocarlos en una nueva fila, debajo de la fila anterior (por eso he creado la variable i). Para esto, estoy casi seguro que hay que utilizar un Do While:

Código:
MSFlexGrid1.Cols = 6
MSFlexGrid1.Rows = 10

i = 0
Do While i < 10
    i = i + 1
    MSFlexGrid1.TextMatrix(i, 0) = i
    MSFlexGrid1.TextMatrix(i, 1) = Text2
    MSFlexGrid1.TextMatrix(i, 2) = Text6
    MSFlexGrid1.TextMatrix(i, 3) = Text4
    MSFlexGrid1.TextMatrix(i, 4) = Text3
    MSFlexGrid1.TextMatrix(i, 5) = Combo1
Loop
Aún así, cuando pongo en funcionamiento el código anterior me sale un error que dice que el subíndice está fuera del intervalo y me marca en amarillo lo siguiente:
Código:
MSFlexGrid1.Cols = 6
MSFlexGrid1.Rows = 10

i = 0
Do While i < 10
    i = i + 1
    MSFlexGrid1.TextMatrix(i, 0) = i
    MSFlexGrid1.TextMatrix(i, 1) = Text2
    MSFlexGrid1.TextMatrix(i, 2) = Text6
    MSFlexGrid1.TextMatrix(i, 3) = Text4
    MSFlexGrid1.TextMatrix(i, 4) = Text3
    MSFlexGrid1.TextMatrix(i, 5) = Combo1
Loop
De nuevo, muchas gracias por tu respuesta erbuson. Ya te ganaste tu primer punto de karma

Espero que alguien me pueda ayudar con este pequeño inconveniente

Un saludo y disculpen las molestias
  #4 (permalink)  
Antiguo 21/11/2009, 15:21
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

Hola:

Ahí me has tocado la fibra. El MsFlexgrid es mi debilidad, me tiene apasionado.
Aqui te dejo una Rutina que te puede servir bastante y te comento

Código:
Public Sub GridPoner(Grid As MSFlexGrid, Fila As Single, Columna As Single, Dato As String)
  ' Rutina general que pone el Dato en la celda indicada, controlando que Fila exista
  If Fila > Grid.Rows - 1 Then Grid.Rows = Fila + 1
  Grid.TextMatrix(Fila, Columna) = Dato
End Sub
Te permite enviar los datos a la celda deseada, controlando que la Fila exista.

Deberías tener por ejemplo dos variables Públicas dentro del código del Formulario para saber como actuar en todo momento.

Public UltimoRegistro As Single, Editando As Single

Imagino que debes tener un Command que cuando lo pulsas, pasa los datos al Grid.

La idea es que cuando hagas click en el Grid recuerdes en que Fila lo has hecho para pasar a Editar la misma.
Editando = MsFlexgrid.Row

En el Command, puedes poner

IF Editando > 0 then
Fila = Editando
Editando = 0
else
Fila = UltimoRegistro+1
end if

Call GridPoner(MsFlexgrid, Fila, 0, Text1)
Call GridPoner(MsFlexgrid, Fila, 1, Text2)
Call GridPoner(MsFlexgrid, Fila, 2, Text3)
Call GridPoner(MsFlexgrid, Fila, 3, Text4)
Call GridPoner(MsFlexgrid, Fila, 4, Combo)

Es un poco la idea, las posibilidades infinitas. Si tienes dudas, dame un toque y veo si te preparo un sencillo ejemplo.

Saludos
  #5 (permalink)  
Antiguo 21/11/2009, 17:24
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

Jaja, bueno, es muy irónico... Mientras que tu debiliad es el MSFlexGrid a mi me está matando, porque es la primera vez que programo y por ende, la primera vez que uso el querido MSFlexgrid.

En fin, he utilizado ese código que me indicas pero no me funciona, el último registro siempre sobreescribe al anterior. Tal vez esté utilizando el código erróneamente... no lo sé, lo único que te puedo asegurar es que intenté de varias formas y no me funciona... Me estoy volviendo loco jaja

Si quieres mostrarme el ejemplo, te estaría muy agradecido. Sino, te envío lo que he programado.

De todas formas, te repito que estoy infinitamente agradecido por tu buena predisposición. Así da gusto!!

Un saludo y de verdad, GRACIAS!
  #6 (permalink)  
Antiguo 21/11/2009, 17:25
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

Aqui te dejo una rutina para crear facilmente las columnas de un Grid

Código:
Public Sub GridTitulos(Grid As MSFlexGrid, Titulos As String)
  ' Crea los títulos de un MsFlexgrid, añadiendo las columnas si hace falta
  ' Formato de Titulo por cada Columna es Ancho # Cabecera Ajuste (<Izquierda, >Derecha =Centro)
  
  ' Ejemplo de utilizacion Call GridTitulos(MSFlexGrid1, "40#Nombre<;10#NIF>;8#Fecha=")
  
  Dim Separador As Integer, Columna As Single, Titulo() As String
  Titulo = Split(Titulos, ";")
  For Columna = 0 To UBound(Titulo)
    If Columna > Grid.Cols - 1 Then Grid.Cols = Columna + 1
    Separador = InStr(Titulo(Columna), "#")
    Grid.ColWidth(Columna) = Val(Left$(Titulo(Columna), Separador)) * 120
    Grid.ColData(Columna) = Grid.ColWidth(Columna)
    Titulo(Columna) = Mid$(Titulo(Columna), Separador + 1)
    Grid.FixedAlignment(Columna) = flexAlignCenterCenter
    If Right$(Titulo(Columna), 1) = "=" Then
      Grid.ColAlignment(Columna) = flexAlignCenterCenter
      Titulo(Columna) = Left$(Titulo(Columna), Len(Titulo(Columna)) - 1)
    ElseIf Right$(Titulo(Columna), 1) = "<" Then
      Grid.ColAlignment(Columna) = flexAlignLeftCenter
      Titulo(Columna) = Left$(Titulo(Columna), Len(Titulo(Columna)) - 1)
    ElseIf Right$(Titulo(Columna), 1) = ">" Then
      Grid.ColAlignment(Columna) = flexAlignRightCenter
      Titulo(Columna) = Left$(Titulo(Columna), Len(Titulo(Columna)) - 1)
    End If
    Grid.TextMatrix(0, Columna) = Titulo(Columna)
  Next
End Sub
Como puedes ver te puede resultar bastante práctica si utilizas muchos Grids
  #7 (permalink)  
Antiguo 21/11/2009, 17:56
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

No me sale, sigue sin funcionar :(

Agradezco tu ayuda y tu paciencia... me imagino como debes estar, bastante cansado por tratar de resolver mis dudas

Si te parece, te envió por Mensaje Privado el formulario en cuestión para que puedas ver exactamente dónde está el error. Suena como una orden, pero por favor, no lo tomes como tal. Si no puedes no importa! Ya estoy más que agradecido por tu ayuda.

GRACIAS
Un saludo!
  #8 (permalink)  
Antiguo 22/11/2009, 02:43
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

No hay problema, si me lo mandas, intento aclararte el error.

Por lo que intuyo debe ser algún pequeño detalle que te está pasando por alto.

Saludos.
  #9 (permalink)  
Antiguo 22/11/2009, 04:09
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

Por si quieres intentar descubrir el error, te comento respecto al código que has utilizado:

Código vb:
Ver original
  1. MSFlexGrid1.Cols = 6
  2. MSFlexGrid1.Rows = 10
  3.  
  4. i = 0
  5. Do While i < 10
  6.     i = i + 1
  7.     MSFlexGrid1.TextMatrix(i, 0) = i
  8.     MSFlexGrid1.TextMatrix(i, 1) = Text2
  9.     MSFlexGrid1.TextMatrix(i, 2) = Text6
  10.     MSFlexGrid1.TextMatrix(i, 3) = Text4
  11.     MSFlexGrid1.TextMatrix(i, 4) = Text3
  12.     MSFlexGrid1.TextMatrix(i, 5) = Combo1
  13. Loop

al MSFlexGrid debes añadirle las filas a medida que las necesites. Las columnas también pero es menos habitual ya que inicialmente ya lo defines con las columnas necesarias.

Por esta razón cuando el Do While llega a un numero superior a MsFlexgrid1.Rows es cuando se produce el error.

Por otra parte ¿ Para que has puesto este bucle ? No tiene ningun sentido ya que con ello lo único que haces es llenar las filas con el mismo valor 10 veces.

Siempre empiezas con el valor i = 0 por lo que es lógico que se actuelice siempre el mismo registro del Grid

Saludos
  #10 (permalink)  
Antiguo 22/11/2009, 04:28
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

Yo no había usado nunca este control, así que por curiosidad he estado experimentando un rato y he creado unos botones con código básico para hacer lo que pedias.
Te lo pongo, no para que lo uses directamente, sino por si te sirve para aclarar tus dudas.

He creado un form con un flexgrid llamado GRID1, 4 textbox (text1...text4) y 4 botones para agregar linea, eliminar linea, modificar linea y leer linea.

Código :
Ver original
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4.   ' Quitamos la columna bloqueada
  5.   GRID1.FixedCols = 0
  6.   ' Decimos que hay 4 columnas y solo una linea para los titulos
  7.   GRID1.Cols = 4
  8.   GRID1.Rows = 1
  9.   ' cargamos los titulos
  10.   GRID1.TextMatrix(0, 0) = "Codigo"
  11.   GRID1.TextMatrix(0, 1) = "Detalle"
  12.   GRID1.TextMatrix(0, 2) = "Precio"
  13.   GRID1.TextMatrix(0, 3) = "Unidades"
  14. End Sub
  15.  
  16. Private Sub Agregar_Click()
  17.   ' si la primera casilla de la ultima linea(row) esta vacia
  18.   ' usamos esa linea para guardar los datos.
  19.   ' Si esta usada creamos una linea nueva
  20.   If GRID1.TextMatrix(GRID1.Rows - 1, 1) <> "" Then GRID1.Rows = GRID1.Rows + 1
  21.   ' esto es para re-utilizar la primera linea que no se puede eliminar una vez creada.
  22.  
  23.   ' cargamos los datos en la ultima linea del grid
  24.   GRID1.TextMatrix(GRID1.Rows - 1, 0) = Text1.Text
  25.   GRID1.TextMatrix(GRID1.Rows - 1, 1) = Text2.Text
  26.   GRID1.TextMatrix(GRID1.Rows - 1, 2) = Text3.Text
  27.   GRID1.TextMatrix(GRID1.Rows - 1, 3) = Text4.Text
  28.  
  29.   ' apuntamos a la nueva linea por si damos a eliminar seguidamente
  30.   GRID1.Row = GRID1.Rows - 1
  31. End Sub
  32.  
  33. Private Sub Leer_Click()
  34.   Text1.Text = GRID1.TextMatrix(GRID1.Row, 0)
  35.   Text2.Text = GRID1.TextMatrix(GRID1.Row, 1)
  36.   Text3.Text = GRID1.TextMatrix(GRID1.Row, 2)
  37.   Text4.Text = GRID1.TextMatrix(GRID1.Row, 3)
  38. End Sub
  39.  
  40. Private Sub Modificar_Click()
  41.   GRID1.TextMatrix(GRID1.Row, 0) = Text1.Text
  42.   GRID1.TextMatrix(GRID1.Row, 1) = Text2.Text
  43.   GRID1.TextMatrix(GRID1.Row, 2) = Text3.Text
  44.   GRID1.TextMatrix(GRID1.Row, 3) = Text4.Text
  45. End Sub
  46.  
  47. Private Sub Borrar_Click()
  48.   If GRID1.Row > 1 Or GRID1.Rows > 2 Then
  49.     GRID1.RemoveItem GRID1.Row
  50.   Else
  51.   ' si solo hay una linea no se puede eliminar,
  52.   ' asi que solo se vacian sus casillas.
  53.     GRID1.TextMatrix(GRID1.Row, 0) = ""
  54.     GRID1.TextMatrix(GRID1.Row, 1) = ""
  55.     GRID1.TextMatrix(GRID1.Row, 2) = ""
  56.     GRID1.TextMatrix(GRID1.Row, 3) = ""
  57.   End If
  58. End Sub

Es muy básico, pero igual te sirve de ayuda.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 22/11/2009 a las 05:10
  #11 (permalink)  
Antiguo 22/11/2009, 04:41
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

Hola:

Por si te interesa saberlo, la fila gris de la izquierda se elimina con el valor
GRID1.FixedCols = 0
Si por casualidad se necesitan mas de una se juega con este valor
GRID1.FixedCols = 2 etc

Lo mismo se permite para la fila inicial en Gris, con el valor FixedRows

Saludos
  #12 (permalink)  
Antiguo 22/11/2009, 05:01
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

Muchas gracias, erbuson.

Ya he modificado el código del mensaje anterior, ahora sin columna inservible
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #13 (permalink)  
Antiguo 23/11/2009, 23:07
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Pasar datos desde un Textbox hacia un FlexGrid

¡¡Muchas gracias a los dos!!
Pkj, el código que me proporcionaste es justamente lo que buscaba. Lo probé y funciona tal como me imaginaba. ¡Miles deGRACIAS! Me ha sidode muchísima utilidad.

Erbuson, lo que me comentaste acerca del Do While es cierto. Yo lo estaba interpretando mal.
Ya he entendido como funciona.

La verdad que lo menos que puedo darles son palabras de agradecimiento, se nota que en este foro se reúne gente con buena predisposición y de sabios conocimientos. Como dije anteriormente, da gusto participar en una comunidad así!

De nuevo, muchas gracias a ambos!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:36.