• Martes 12 de Noviembre de 2024, 20:46

Autor Tema:  Usar Datos Suministrados En Un Formulario En Otro  (Leído 1804 veces)

karolarivero

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Usar Datos Suministrados En Un Formulario En Otro
« en: Viernes 7 de Septiembre de 2007, 21:36 »
0
Hola a todos:

Tengo un formulario donde se suministran un dato con este dato se buscan otros asociados al anterior en una base de datos y los mismos se muestran en el formulario. Este formulario tiene la opcion de imprimir toda esa información, pues al llamar el boton imprimir se muestra otro formulario donde esta el reporte como tal en esta ventana estoy tratando de hacer lo siguiente:

Código: Text
  1.  
  2.  
  3. Public Sub ReporteNcRecepcion_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.  
  5.         Dim Reporte As New AvisoNc()
  6.  
  7. 'Creo una instancia de la ventana donde se suministran los datos
  8.  
  9.         Dim a As New AvisosNcRecepcion()
  10.  
  11. 'aqui le digo a la variable q tome el valor que esta en el textboxt1 del formulario donde se suministran los datos y se lo paso a la formula para que se impriman en el reporte los datos mostrados en el formulario anterior
  12.  
  13.       dim nombre as string= a.TextBox1.Text()
  14.  
  15.  
  16.      
  17.  
  18.         'CrystalReportViewer1.SelectionFormula = "{Carga.NombreB} =nombre
  19.         CrystalReportViewer1.Refresh()
  20.  
  21.  
  22.         CrystalReportViewer1.ReportSource = Reporte
  23.  
  24.         Me.WindowState = FormWindowState.Maximized
  25.  
  26.     End Sub
  27.  
  28.  
  29.  

Pero no muestra nada, porque no se esta pasando nada a la variable, bueno por la corrida que hice se ve que no se pasa nada a la variable...


Alguien me puede dar una manito con esto, saludos y gracias
MCRS

Scherzo

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
    • http://www.mma-spain.com
Re: Usar Datos Suministrados En Un Formulario En Otro
« Respuesta #1 en: Lunes 10 de Septiembre de 2007, 15:23 »
0
Hola, si no me equivoco lo que te está pasando es que realmente no estás usando la instancia que quieres, sino una nueva que no contiene la información que quieres pasar de un formulario a otro.

Me explico, si te fijas en tu código estás haciendo lo siguiente:

Código: Text
  1.  
  2. Dim Reporte As New AvisoNc()
  3. Dim a As New AvisosNcRecepcion()
  4.  
  5.  

Es decir, estás instanciando un nuevo objeto ("a") que es DEL MISMO TIPO que la ventana desde la que quieres obtener la información PERO NO ES la misma ventana de la que quieres obtener la información, es una nueva instancia. Por lo que tienes realmente dos objetos del mismo tipo pero físicamente diferentes. Tú intentas obtener la información del objeto "a" que es una ventana del tipo AvisosNcRecepción, pero esta ventana "a" es una instancia totalmente distinta a la ventana en la que tienes la información (que no sé cómo se llamará la instancia) que quieres imprimir. Por eso cuando accedes a dicha información te sale toda en blanco (porque es una ventana nueva que no tiene la información que quieres).

Para hacer lo que quieres tendrías que pasar una referencia a la ventana que tiene la información y luego acceder a ella a través de dicha referencia.

Espero haberme sabido explicar.

Saludos

karolarivero

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Usar Datos Suministrados En Un Formulario En Otro
« Respuesta #2 en: Martes 11 de Septiembre de 2007, 15:07 »
0
Hola,

Ok, entendi lo que estoy haciendo mal, pero como hago para pasar una referencia a la ventana que tiene la información y luego acceder a ella a través de dicha referencia? <_<

De lo que he investigado me dicen que use variables globales, quisiera saber si existe otra manera... ah probe con una funcion amiga, pero al cerrar la ventana que contiene la informacion (ventana origen) se pierde la informacion en la ventana destino...  :(

Saludos
MCRS

Scherzo

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
    • http://www.mma-spain.com
Re: Usar Datos Suministrados En Un Formulario En Otro
« Respuesta #3 en: Martes 11 de Septiembre de 2007, 16:49 »
0
Lo puedes hacer de diferentes formas. Si lo que quieres hacer es que se pasen los datos y puedas cerrar el formulario origen (donde tenías los datos inicialmente), lo que puedes hacer es en lugar de pasar el formulario por referencia, pasarlo por copia. O simplemente pasar los datos que necesites. Se puede plantear de múltiples formas.

Por ejemplo, en el caso que pasemos el formulario completo por copia, lo haríamos así.

Tenemos dos formularios, el formulario inicial, el que tiene los datos, lo llamaremos oFormularioOrigen del tipo FormularioOrigen y el formulario que los va a recibir lo llamaremos oFormularioDestino de la clase FormularioDestino.

En el formulario destino tendrías que crear un método público, lo llamaremos por ejemplo RecibirDatos() y tendrá la siguiente definición:

Código: Text
  1.  
  2. Public Sub RecibirDatos(ByVal oForm as FormularioOrigen)
  3.  
  4.  

Ahora, cuando quieras pasarle los datos, desde el formulario origen harías

Código: Text
  1.  
  2. Dim oFormularioDestino as New FormularioDestino
  3.  
  4. oFormularioDestino.RecibirDatos(Me)
  5.  
  6.  

Y con eso le estás pasando al formulario destino una copia del formulario origen que lo está llamando, así, aunque destruyas el formulario origen, en el formulario destino seguirás teniendo una copia del formulario origen con todos sus datos en las cajas de texto.

Lo que tienes que tener en cuenta es que las cajas de texto del formulario origen que van a tener los datos tengan la propiedad Modifiers con el valor "Public" para que así puedas acceder as ellas desde el formulario destino.

Esta forma no es más una de las formas en la que lo puedes hacer, no es necesariamente la mejor ni la más óptima, ya que depende de lo que se necesite hacer. Este mismo planteamiento lo podrías hacer pasando en lugar de todo el formulario sólo los valores de los campos de datos (en Strings), que sería más rápido y seguro que pasar todo el formulario.

Igualmente lo puedes hacer mediante variables globales como ya has comentado (aunque no me parece muy recomendable porque rompes un poco la encapsulación).

También podrías hacer que en lugar de tener un método que recibe datos en el formulario destino tuvieras un método en el formulario origen que los devolviera cuando se le pidieran (aunque esto te obligaría a no destruir el formulario origen hasta que no hayas leído los datos).

Etc. Como ves se puede plantear de diferentes formas. Espero no haberte liado más.

Saludos