Foros del Web » Programación para mayores de 30 ;) » .NET »

funcionamiento de textBox enlazados

Estas en el tema de funcionamiento de textBox enlazados en el foro de .NET en Foros del Web. hola, estoy haciendo un winForm con vb.net. Tengo unos textBox enlazados a ciertos campos de un dataSet que contiene datos de una tabla de una ...
  #1 (permalink)  
Antiguo 27/06/2005, 03:58
 
Fecha de Ingreso: abril-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 0
funcionamiento de textBox enlazados

hola,

estoy haciendo un winForm con vb.net.
Tengo unos textBox enlazados a ciertos campos de un dataSet que contiene datos de una tabla de una base de datos Access de la siguiente manera:
Código:
 enlace = New Binding("Text", miDataSet, "miTabla.miCampo1")
            TBoxCampo1.DataBindings.Add(enlace)
            enlace = Nothing
            enlace = New Binding("Text", miDataSet, "miTabla.miCampo2")
            TBoxCampo2.DataBindings.Add(enlace)
            miBindingManagerBase = BindingContext(miDataSet, "miTabla")
El caso es que yo quiero que en el formulario, cuando se modifique campo1,
cambie también el valor de campo2. Para ello en el evento textChanged de TBoxCampo1, modifico la propiedad text de tBoxCampo2. Hasta aquí todo bien.
Pero ahora, si con estos valores actualizo la base de datos (con miAdaptador.Update() al hacer clic en un botón) se pierden los enlaces. (Los textBox se quedan en blanco). Sin embargo la base de datos se actualiza bien.

¿Alguien sabe por qué pasa esto o como solucionarlo? Llevo toda la mañana intentándolo.....

Gracias
  #2 (permalink)  
Antiguo 27/06/2005, 05:42
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Pon el código del boton para ver lo que hace.

En principio no debe perderse el cursor, unicamente con el update. Otra cosa es que hagas un Clear y un Fill del dataset después de updatearlo, ya que entonces te cambia de posición y se vuelve a situar al principio, pero nunca te debe perder los enlaces de los controles..
__________________
..:: moNTeZIon ::..
  #3 (permalink)  
Antiguo 28/06/2005, 01:54
 
Fecha de Ingreso: abril-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 0
hola,

efectivamente, hago un clear y un fill después del update. El problema es que tengo otra tabla relacionada con esta, y si no hago de nuevo el fill, al intentar añadir un registro de la tabla relacionada, me da un error (dice que la clave está a null). No se si es que con el bindingManager.addNew() no se actualiza bien la tabla padre o que. Resumo cómo lo tengo (muy simplificado, claro):

Creación del dataset:
Código:
adaptador1.Fill(miDataSet, "principal")
adaptador2.Fill(miDataSet, "secundarial")
miDataSet.Relations.Add("relacion1", miDataSet.Tables("principal").Columns("id"), miDataSet.Tables("secundaria").Columns("id_ppal"))
Enlace al formulario:
Código:
enlace = New Binding("Text", miDataSet, principal.id")
TBox1.DataBindings.Add(enlace)
enlace = Nothing
enlace = New Binding("Text", miDataSet, principal.otroCampo")
TBox2.DataBindings.Add(enlace)
enlace = Nothing
enlace = New Binding("Text", miDataSet, secundaria.campoNoId")
TBox3.DataBindings.Add(enlace)
enlace = Nothing
miBindingManagerBase1 = BindingContext(miDataSet, "principal")
miBindingManagerBase2 = BindingContext(miDataSet, "principal.relacion")
Código del botón actualizar (cuando se rellena tbox1 y tbox2)
Código:
miBindingManagerBAse1.EndCurrentEdit()
adaptador1.update(miDataSet.tables("principal"))
miDataSet.clear()
adaptador1.Fill(miDataSet, "principal")
adaptador2.Fill(miDataSet, "secundarial")
Código del botón actualizar (cuando se rellena tbox3). Da error si se hace justo después de añadir un registro en principal sin llamar a clear y a fill (por eso los pongo)
Código:
miBindingManagerBase2.EndCurrentEdit()
adaptador2.update(miDataSet.tables("secundaria"))
En enlace se pierde en el textChanged del TBox2, en el que hago una operación del tipo tboxn.text = "algo". Lo curioso es que solo se pierde el enlace de algunos controles, no de todos

En fin, muchas gracias.

Última edición por Laurichu; 28/06/2005 a las 02:36
  #4 (permalink)  
Antiguo 28/06/2005, 02:25
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
En este codigo:

adaptador1.Fill(miDataSet, "principal")
adaptador2.Fill(miDataSet, "secundarial")
miDataSet.Relations.Add("relacion1", miDataSet.Tables("principal").Columns("id"), miDataSet.Tables("secundaria").Columns("id_ppal"))

En la segunda linea llamas a la tabla "secundarial" y en la tercera linea la llamas "secundaria". Supongo que será error al escribir el mensaje.

Respecto a los updates, tu lo haces así:
adaptador1.update(miDataSet.tables("principal"))

Prueba así:
adaptador1.update(miDataSet, "principal")

Y respecto a los enlaces, prueba hacerlos así:
enlace = New Binding("Text", miDataSet, "principal.id")
TBox1.DataBindings.Add(enlace)
(Te dejaste la comilla doble antes del nombre de las tablas)

Y la relación, en principio lo veo bien.

No se que mas decirte, prueba y nos dices a ver..
Saludos.
__________________
..:: moNTeZIon ::..
  #5 (permalink)  
Antiguo 28/06/2005, 02:53
 
Fecha de Ingreso: abril-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 0
nada, sigue igual (Aunque te agradezco la molestia que te tomas, moNTeZIon). Lo del nombre de la tabla y las comillas eran errores del mensaje. En cuanto al update, lo hice como me dijiste, pero sigue igual.
A ver si os dice algo el código del evento textChanged:
Código:
Private Sub TBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TBox1.TextChanged
'Solo se realiza la actualización cuando es el usuario el que 
'modifica los datos (el resto del tiempo readOnly = true)
If Not TBox1.ReadOnly Then
      If TBox1.Text <> String.Empty Then
            TBoxN.Text = "ejemplo"
      End If
End If
End Sub
Lo curioso es que no se pierde el enlace del TBOx1, sino del TBoxN y de otros que no intervienen aquí
  #6 (permalink)  
Antiguo 28/06/2005, 03:50
 
Fecha de Ingreso: abril-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 0
ya acoté aún más el error. El problema está en que lo que escribo en el tBoxN es el resultado de una consulta a una base de datos (que la hace una función de otro módulo). Si en vez de utilizar el evento textChanged utilizo el validated, todo va bien. El problema es que no se actualiza el tBox que quiero escribir hasta que este no pierde el foco, y no es eso lo que quiero.... ¿alguna idea?¿alguien sabe por qué me pasa esto (lo de que se pierdan los enlaces?
  #7 (permalink)  
Antiguo 28/06/2005, 03:54
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Igual el textChanged salta al perder el foco y comprobar que ha cambiado el texto.. Prueba con algun evento de presion de tecla a ver..
__________________
..:: moNTeZIon ::..
  #8 (permalink)  
Antiguo 28/06/2005, 04:00
 
Fecha de Ingreso: abril-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 0
Brrrrrrrrrrrrrr :((

EL evento KeyPress funciona bien.... pero salta antes de que cambie el contenido del TBox. Tienes idea de como podría obtener el nuevo contenido? no se si hay algo mejor que a lo que ya hay hacerle un append de lo nuevo.... que es bastante feo
  #9 (permalink)  
Antiguo 28/06/2005, 04:09
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Y el KeyUp ??
__________________
..:: moNTeZIon ::..
  #10 (permalink)  
Antiguo 28/06/2005, 04:15
 
Fecha de Ingreso: abril-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 0
Bingo!

Muchísimas gracias por tu ayuda... te debo una !!
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 20:54.