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

Perdida de dato en TextBox

Estas en el tema de Perdida de dato en TextBox en el foro de .NET en Foros del Web. Estimados: Me pasa lo siguiente, Tengo tres formularios en el primero ingreso el rut y otros datos mas, al hacerle click en uno de los ...
  #1 (permalink)  
Antiguo 16/11/2009, 16:01
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
De acuerdo Perdida de dato en TextBox

Estimados:

Me pasa lo siguiente,

Tengo tres formularios

en el primero ingreso el rut y otros datos mas, al hacerle click en uno de los botones me voy al otro formulario y me copia el rut en la caja de texto de este otro formulario.

EL PROBLEMA ESTA QUE CUANDO APRETO UN BOTON PARA QUE SE ME ABRA EL TERCER FORMULARIO, ESTE SE ME ABRE, SELECCIONO LOS DATOS DE UN DATAgRIDvIEW QUE SE COPIAN EN DOS TEXTbOX DEL FORMULARIO 2, PERO EL RUT QUE SE ME HABIA COPIADO DEL FORMULARIO 1 AL 2 SE BORRA

qUE HAGO

ESTOY TRABAJANDO EN VB.NET CON SQLSERVER 2000 Y VISUAL STUDIO 2005
  #2 (permalink)  
Antiguo 16/11/2009, 17:02
Avatar de eperedo  
Fecha de Ingreso: septiembre-2009
Ubicación: Perú
Mensajes: 654
Antigüedad: 14 años, 7 meses
Puntos: 16
Respuesta: Perdida de dato en TextBox

Has hecho debug al código?? logras identificar exactamente en que parte se pierde el valor?? Si es así podrías poner el código acá así te podemos ayudar mejor.

Mira este ejemplo a ver si te sirve de ayuda.

__________________
Eduardo Peredo
Wigoin
  #3 (permalink)  
Antiguo 17/11/2009, 06:45
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Perdida de dato en TextBox

EPeredo gracias por tu tiempo...

Mira se cae cuando aprieto el boton buscar para ir a buscar los datos al tercer formulario. Le hago click al boton se abre el tercer formulario y al volver ya no esta el rut...

Este es el codigo del boton...

If (Me.CBEstadoPerfilEspecial.Text.Length) = 0 Then
MessageBox.Show("Debe ingresar los datos que faltan (Estado)")
Else
Dim pantallaBuscarSistema As New FrmCargaGrillaEmpresa
pantallaBuscarSistema.Visible = False

pantallaBuscarSistema.Visible = True
pantallaBuscarSistema.Show()

If (Me.TxtRutAsignacion.Text.Length) = 0 Then
MessageBox.Show("Debe ingresar los datos que faltan (Rut usuario).", "Error.", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
pantallaBuscarSistema.Visible = False

pantallaBuscarSistema.Visible = True
pantallaBuscarSistema.Show()
End If

If (Me.TxtDigAsignacion.Text.Length) = 0 Then
MessageBox.Show("Debe ingresar los datos que faltan (Digito Verificador del rut usuario).", "Error.", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
pantallaBuscarSistema.Visible = False

pantallaBuscarSistema.Visible = True
pantallaBuscarSistema.Show()
End If
End If
  #4 (permalink)  
Antiguo 17/11/2009, 08:37
Avatar de eperedo  
Fecha de Ingreso: septiembre-2009
Ubicación: Perú
Mensajes: 654
Antigüedad: 14 años, 7 meses
Puntos: 16
Respuesta: Perdida de dato en TextBox

Cita:
Dim pantallaBuscarSistema As New FrmCargaGrillaEmpresa
pantallaBuscarSistema.Visible = False

pantallaBuscarSistema.Visible = True
No entiendo bien tu código, porque asignas False a la propiedad visible si en la siguiente línea le das True?

Aunque eso no debería provocar que se borre el dato, en el formulario FrmCargaGrillaEmpresa interactúa con el formulario 2? Quizá algun proceso de ese formulario esté borrando el valor de la caja de texto.
Revisaste el código de ejemplo que te pasé, quizá mostrando el último formulario como modal no se pierda el dato.

Saludos.
__________________
Eduardo Peredo
Wigoin
  #5 (permalink)  
Antiguo 17/11/2009, 10:08
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Perdida de dato en TextBox

Mira este es el codigo que tengo en el formulario de la grilla. este es el tercer formulario que se abre cuando apreto el boton

Private Sub FrmCargaGrillaEmpresa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Instanciar métodos de consultas
Dim metodoGrillaSistemaEspecifico As New CAPA_NEGOCIO.Consulta_Negocio
'Crear iterator para acceder a los datos
Dim iterator As System.Collections.IEnumerator = auxConAsig.CargarGrillaDatosEspecificosSistema().G etEnumerator
While (iterator.MoveNext)
Dim sistema As New CAPA_DTO.Sistema
sistema = iterator.Current
'Insertar los datos del ArrayList a la tabla
Dim row0 As String() = {CStr(sistema._id_sistema), CStr(sistema._descripcion)}
With Me.DGVSistemas.Rows
.Add(row0)

End With
End While
End Sub

Private Sub DGVSistemas_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGVSistemas.CellContentClick
Dim pantallaAsignacionPerfilesEspeciales As New FrmAsignacionPerfilEspecial
Dim pantallaAsignacionPerfilEspecial As New FrmAsignacionPerfilEspecial
pantallaAsignacionPerfilesEspeciales.TxtCodigoAsig nacion.Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(0).Value()
pantallaAsignacionPerfilesEspeciales.TxtSistemaAsi gnacion.Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(1).Value()
pantallaAsignacionPerfilesEspeciales.Visible = False

pantallaAsignacionPerfilesEspeciales.Visible = True
pantallaAsignacionPerfilesEspeciales.Show()

Me.Close()


End Sub

No se que onda

y no hay ningun evento que no refresque, porque al momento de pinchar el boton se borra inmediatamente el rut???????????

No se que hacer, favor ayudame

= que tu me ayudaste en el TreeView, ya esta cargado y todo,
pero ahora me repite los nodos padres y como los nodos padres tienen nodos hijos asociados, estos tambien me los repite
  #6 (permalink)  
Antiguo 17/11/2009, 10:40
Avatar de eperedo  
Fecha de Ingreso: septiembre-2009
Ubicación: Perú
Mensajes: 654
Antigüedad: 14 años, 7 meses
Puntos: 16
Respuesta: Perdida de dato en TextBox

Aún sigo con la duda del por qué usar Visible = False y True seguidos...
El problema si no me equivoco es que en el evento CellContentClick tu instancias a FrmAsignacionPerfilEspecial que supongo es el formulario 2 verdad?

Al instanciarlo obviamente se borra el valor de la caja de texto porque se llama al método InitializeComponent que vuelve a dibujar todo...

Para evitar esto tendrías que acceder a este formulario de otra forma:
Primero para llamar al formulario FrmCargaGrillaEmpresa lo haces de esta forma:
Código vb.net:
Ver original
  1. Dim f As New FrmCargaGrillaEmpresa()
  2. Me.AddOwnedForm(f) 'Le indicarás que el formulario 3 será el padre de este.
  3. f.Show()

Luego para darle los valores a los demás textbox lo haces así:
Código vb.net:
Ver original
  1. Ctype(Me.Owner, FrmAsignacionPerfilEspecial).TxtCodigoAsignacion.Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(0).Value()
  2. Ctype(Me.Owner, FrmAsignacionPerfilEspecial).TxtSistemaAsignacion.Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(1).Value()

Ya no uses el visible = false / true, a menos que esto afecte a tu proceso, cosa que dudo mucho por la forma como está.

Espero que esto te sirva, cualquier duda me avisas
PD: Creo que te evitarías todo esto si usaras formularios modales. (o sea el método ShowDialog en vez de Show)
__________________
Eduardo Peredo
Wigoin
  #7 (permalink)  
Antiguo 17/11/2009, 13:49
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Perdida de dato en TextBox

Gracias me sirvio de mucho,

EL UNICO DETALLE ES QUE AL VOLVER DE LA SELECCION EN LA GRILLA QUEDAN TODAS LAS CAJAS DE TEXTO EN BLANCO Y TENGO QUE APRETAR EL BOTON VOLVER (QUE LO UNICO QUE TIENE DECLARADO ES EL ME.CLOSE())

ESTE ES EL CODIGO DE LA GRILLA

Private Sub DGVSistemas_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGVSistemas.CellContentClick
Dim pantallaAsignacionPerfilesEspeciales As New FrmAsignacionPerfilEspecial

CType(Me.Owner, FrmAsignacionPerfilEspecial).TxtCodigoAsignacion.T ext = Me.DGVSistemas.Rows(e.RowIndex).Cells(0).Value()
CType(Me.Owner, FrmAsignacionPerfilEspecial).TxtSistemaAsignacion. Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(1).Value()
'pantallaAsignacionPerfilesEspeciales.TxtCodigoAsi gnacion.Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(0).Value()
'pantallaAsignacionPerfilesEspeciales.TxtSistemaAs ignacion.Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(1).Value()
pantallaAsignacionPerfilesEspeciales.Show()

Me.Close()
End Sub

Y ASI QUEDO EL BOTON BUSCAR

If (Me.CBEstadoPerfilEspecial.Text.Length) = 0 Then
MessageBox.Show("Debe ingresar los datos que faltan (Estado)")
Else

'Dim f As New FrmCargaGrillaEmpresa()
'Me.AddOwnedForm(f) 'Le indicarás que el formulario 3 será el padre de este.
'f.Show()

Dim f As New FrmCargaGrillaEmpresa
Me.AddOwnedForm(f)
f.Show()

If (Me.TxtRutAsignacion.Text.Length) = 0 Then
MessageBox.Show("Debe ingresar los datos que faltan (Rut usuario).", "Error.", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Me.AddOwnedForm(f)
f.Show()
End If

If (Me.TxtDigAsignacion.Text.Length) = 0 Then
MessageBox.Show("Debe ingresar los datos que faltan (Digito Verificador del rut usuario).", "Error.", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Me.AddOwnedForm(f)
f.Show()
End If
End If

INTENTE PONER EL CHOWDIALOG, PERO ME DIO ERROR...

GRACIAS POR LA AYUDA, PERO ESO ES LO UNICO QUE FALTA
  #8 (permalink)  
Antiguo 17/11/2009, 14:13
Avatar de eperedo  
Fecha de Ingreso: septiembre-2009
Ubicación: Perú
Mensajes: 654
Antigüedad: 14 años, 7 meses
Puntos: 16
Respuesta: Perdida de dato en TextBox

Cita:
Private Sub DGVSistemas_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGVSistemas.CellContentClick
Dim pantallaAsignacionPerfilesEspeciales As New FrmAsignacionPerfilEspecial

CType(Me.Owner, FrmAsignacionPerfilEspecial).TxtCodigoAsignacion.T ext = Me.DGVSistemas.Rows(e.RowIndex).Cells(0).Value()
CType(Me.Owner, FrmAsignacionPerfilEspecial).TxtSistemaAsignacion. Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(1).Value()
'pantallaAsignacionPerfilesEspeciales.TxtCodigoAsi gnacion.Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(0).Value()
'pantallaAsignacionPerfilesEspeciales.TxtSistemaAs ignacion.Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(1).Value()
pantallaAsignacionPerfilesEspeciales.Show()

Me.Close()
End Sub
Igual estás instanciando el formulario debes de quitar esas líneas, el código para ese evento quedaría así nada más.
Código vb.net:
Ver original
  1. Private Sub DGVSistemas_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGVSistemas.CellContentClick
  2.  
  3. CType(Me.Owner, FrmAsignacionPerfilEspecial).TxtCodigoAsignacion.T ext = Me.DGVSistemas.Rows(e.RowIndex).Cells(0).Value()
  4. CType(Me.Owner, FrmAsignacionPerfilEspecial).TxtSistemaAsignacion. Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(1).Value()
  5. '
  6. Me.Close()
  7. End Sub
__________________
Eduardo Peredo
Wigoin
  #9 (permalink)  
Antiguo 17/11/2009, 14:24
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Perdida de dato en TextBox

AHY SI... MUCHISIMAS GRACIAS EPEREDO, ERES SECO

Explicame una cosa que no entiendo plis..........

En el segundo formulario en el load yo cargo un treeView u cuando rescato el codigo en
la grilla se llenaba con los datos, pero ahora no se llena.

Pero lo demas esta super bien, esta instanciando form a la ves..

Gracias otyra ves
  #10 (permalink)  
Antiguo 17/11/2009, 14:36
Avatar de eperedo  
Fecha de Ingreso: septiembre-2009
Ubicación: Perú
Mensajes: 654
Antigüedad: 14 años, 7 meses
Puntos: 16
Respuesta: Perdida de dato en TextBox

A ver si entendí, luego de cerrar el 3er formulario, se cargaba el TreeView con el dato que habías traído de la grilla?
Lo que podrías hacer es poner ese código para cargar el TreeView en un método público y llamarlo desde el formulario 3.
Algo así:
Código vb.net:
Ver original
  1. Public sub cargarTreeView()
  2. 'Código para cargarlo
  3. End Sub

Y usarlo aquí:
Código vb.net:
Ver original
  1. Private Sub DGVSistemas_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGVSistemas.CellContentClick
  2.  
  3. CType(Me.Owner, FrmAsignacionPerfilEspecial).TxtCodigoAsignacion.T ext = Me.DGVSistemas.Rows(e.RowIndex).Cells(0).Value()
  4. CType(Me.Owner, FrmAsignacionPerfilEspecial).TxtSistemaAsignacion. Text = Me.DGVSistemas.Rows(e.RowIndex).Cells(1).Value()
  5. '
  6. CType(Me.Owner, FrmAsignacionPerfilEspecial).cargarTreeView()
  7. Me.Close()
  8. End Sub

Es una opción, quizá también podrías usar el evento FormClosing o FormClosed del formulario3.

Espero te ayude.

PD: Qué significa SECO? Estoy flaco, pero no tanto XD
__________________
Eduardo Peredo
Wigoin
  #11 (permalink)  
Antiguo 17/11/2009, 14:56
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Perdida de dato en TextBox

Millones de Gracias....eres lo mas grande......... ahora si que si

Seco Significa que eres muy bueno en lo que haces, en este caso Programando...

La ultima consulta

ahora se carga el treeview y necesito capturar el codigo del nodo seleccionado,
como lo hago

Mira asi cargo el TreeView

Public Sub cargarTreeView()
'CARGANDO EL TREEVIEW CON EL INICIO DEL FORMULARIO

' crear conexión
Dim cadena As String
cadena = "Data Source = BRAVO; Initial Catalog = dbmultiusuario; Integrated Security=SSPI; Trusted_Connection=false; user id = glopez ; Password = lopez"
Dim cnn As New SqlConnection(cadena)
Dim variable As String
variable = Me.TxtCodigoAsignacion.Text

' crear los DataAdapter
Dim oDAMenu As New SqlDataAdapter("select m.idmenu, f.codigo_form FROM FORMULARIO f, SISTEMA s, MENU m WHERE (s.idsistema = f.idsistema) and (m.idsistema = s.idsistema) and f.idsistema = '" & Me.TxtCodigoAsignacion.Text & "'", cnn)
'Dim oDAFormulario As New SqlDataAdapter("SELECT * FROM FORMULARIO ", cnn)

' crear conjunto de datos
Dim oDataSet As New DataSet

' utilizar los adaptadores para llenar el dataset con las tabla
oDAMenu.Fill(oDataSet, "MENU")
'oDAFormulario.Fill(oDataSet, "FORMULARIOS")

' defino variables del tipo DataTable
Dim oTablaMenu As New DataTable
'Dim oTablaFormulario As DataTable

' asigno a las variables los datos de las tablas del DataSet
oTablaMenu = oDataSet.Tables(0)
'oTablaFormulario = oDataSet.Tables("FORMULARIOS")

Dim oVista As DataView

' lleno la vista con el contenido de la Tabla MENU
'oVista = oDataSet.Tables("MENU").DefaultView
oVista = oTablaMenu.DefaultView

' deshabilita la actualización en pantalla del control TreeView
TVMenuAsignacion.BeginUpdate()

' defino variable del tipo DataRow
'Dim Registro As DataRow

'Declarando el Nodo
Dim nodo As New TreeNode

' creo un nodo raiz (el nombre Country, puede ser cualquier texto como Raíz, Root, etc.)
nodo = TVMenuAsignacion.Nodes.Add("Sistema")

'For Each Registro In oTablaMenu.Rows
For Each Registro As DataRow In oTablaMenu.Rows
' agrego el nodo en el segundo nivel
nodo = TVMenuAsignacion.Nodes(0).Nodes.Add(Registro("IDME NU").Trim())
' si no hay un nodo raiz, se usaría la siguiente línea
'nodo = TVMenuAsignacion.Nodes.Add(Trim(Registro("CARGA")) )

' realizo un filtro dentro de la vista
oVista.RowFilter = "IDMENU = '" & Registro("IDMENU") + "'"

' ciclo para recorrer la vista previamente filtrada
Dim a As Integer
For a = 0 To oVista.Count - 1
' agrego el nodo en el tercer nivel
nodo.Nodes.Add(Trim(oVista.Item(a).Row("CODIGO_FOR M")))
Next
' expando todos los nodos de árbol secundario
nodo.ExpandAll()
Next
' habilita la actualización en pantalla del control TreeView
TVMenuAsignacion.EndUpdate()

' modifico la propiedad AllowDrop a True para poder realizar Drag and Drop
TVMenuAsignacion.AllowDrop = True

' modifico la propiedad Sorted a True para que los nodos estén ordenados
TVMenuAsignacion.Sorted = True

'Asignandole una Imagen al TreeView
Me.TVMenuAsignacion.ImageList = Me.ImagenTreeViewAsignacionPerfilesEspeciales
Me.TVMenuAsignacion.ImageIndex = 1
nodo.ImageIndex = 0
Me.TVMenuAsignacion.SelectedNode = Me.TVMenuAsignacion.Nodes(0)

End Sub
  #12 (permalink)  
Antiguo 17/11/2009, 15:01
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Perdida de dato en TextBox

Millones de Gracias....eres lo mas grande......... ahora si que si

Seco Significa que eres muy bueno en lo que haces, en este caso Programando...

La ultima consulta

ahora se carga el treeview y necesito capturar el codigo del nodo seleccionado,
como lo hago

Mira asi cargo el TreeView

Public Sub cargarTreeView()
'CARGANDO EL TREEVIEW CON EL INICIO DEL FORMULARIO

' crear conexión
Dim cadena As String
cadena = "Data Source = BRAVO; Initial Catalog = dbmultiusuario; Integrated Security=SSPI; Trusted_Connection=false; user id = glopez ; Password = lopez"
Dim cnn As New SqlConnection(cadena)
Dim variable As String
variable = Me.TxtCodigoAsignacion.Text

' crear los DataAdapter
Dim oDAMenu As New SqlDataAdapter("select m.idmenu, f.codigo_form FROM FORMULARIO f, SISTEMA s, MENU m WHERE (s.idsistema = f.idsistema) and (m.idsistema = s.idsistema) and f.idsistema = '" & Me.TxtCodigoAsignacion.Text & "'", cnn)
'Dim oDAFormulario As New SqlDataAdapter("SELECT * FROM FORMULARIO ", cnn)

' crear conjunto de datos
Dim oDataSet As New DataSet

' utilizar los adaptadores para llenar el dataset con las tabla
oDAMenu.Fill(oDataSet, "MENU")
'oDAFormulario.Fill(oDataSet, "FORMULARIOS")

' defino variables del tipo DataTable
Dim oTablaMenu As New DataTable
'Dim oTablaFormulario As DataTable

' asigno a las variables los datos de las tablas del DataSet
oTablaMenu = oDataSet.Tables(0)
'oTablaFormulario = oDataSet.Tables("FORMULARIOS")

Dim oVista As DataView

' lleno la vista con el contenido de la Tabla MENU
'oVista = oDataSet.Tables("MENU").DefaultView
oVista = oTablaMenu.DefaultView

' deshabilita la actualización en pantalla del control TreeView
TVMenuAsignacion.BeginUpdate()

' defino variable del tipo DataRow
'Dim Registro As DataRow

'Declarando el Nodo
Dim nodo As New TreeNode

' creo un nodo raiz (el nombre Country, puede ser cualquier texto como Raíz, Root, etc.)
nodo = TVMenuAsignacion.Nodes.Add("Sistema")

'For Each Registro In oTablaMenu.Rows
For Each Registro As DataRow In oTablaMenu.Rows
' agrego el nodo en el segundo nivel
nodo = TVMenuAsignacion.Nodes(0).Nodes.Add(Registro("IDME NU").Trim())
' si no hay un nodo raiz, se usaría la siguiente línea
'nodo = TVMenuAsignacion.Nodes.Add(Trim(Registro("CARGA")) )

' realizo un filtro dentro de la vista
oVista.RowFilter = "IDMENU = '" & Registro("IDMENU") + "'"

' ciclo para recorrer la vista previamente filtrada
Dim a As Integer
For a = 0 To oVista.Count - 1
' agrego el nodo en el tercer nivel
nodo.Nodes.Add(Trim(oVista.Item(a).Row("CODIGO_FOR M")))
Next
' expando todos los nodos de árbol secundario
nodo.ExpandAll()
Next
' habilita la actualización en pantalla del control TreeView
TVMenuAsignacion.EndUpdate()

' modifico la propiedad AllowDrop a True para poder realizar Drag and Drop
TVMenuAsignacion.AllowDrop = True

' modifico la propiedad Sorted a True para que los nodos estén ordenados
TVMenuAsignacion.Sorted = True

'Asignandole una Imagen al TreeView
Me.TVMenuAsignacion.ImageList = Me.ImagenTreeViewAsignacionPerfilesEspeciales
Me.TVMenuAsignacion.ImageIndex = 1
nodo.ImageIndex = 0
Me.TVMenuAsignacion.SelectedNode = Me.TVMenuAsignacion.Nodes(0)

End Sub
  #13 (permalink)  
Antiguo 17/11/2009, 15:05
Avatar de eperedo  
Fecha de Ingreso: septiembre-2009
Ubicación: Perú
Mensajes: 654
Antigüedad: 14 años, 7 meses
Puntos: 16
Respuesta: Perdida de dato en TextBox

Pero en que evento deseas eso? Si no me falla la memoria puedes usar NodeMouseClick (no estoy seguro si ese es el nombre)
Código vb.net:
Ver original
  1. Private Sub TreeView1_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
  2.         MessageBox.Show(e.Node.Text)
  3. End Sub

Espero te sirva
__________________
Eduardo Peredo
Wigoin
  #14 (permalink)  
Antiguo 17/11/2009, 15:12
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Perdida de dato en TextBox

SI, pero ese codigo lo necesito guardar aca en el codigo del boton Guardar

DEBO CAPTURARLO DONDE ESTAN LOS *****

GRACIAS

MIra este es el codigo

'Validar que datos no queden en blanco
If (Me.TxtRutAsignacion.Text.Length) = 0 Then
MessageBox.Show("Debe ingresar el numero de Rut.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.TxtRutAsignacion.Focus()
Exit Sub
End If
If (Me.TxtDigAsignacion.Text.Length) = 0 Then
MessageBox.Show("Debe ingresar el digito verificador correspondiente a su rut.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.TxtDigAsignacion.Focus()
Exit Sub
End If
If (Me.CBEstadoPerfilEspecial.Text.Length) = 0 Then
MessageBox.Show("Debe seleccionar el estado.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.CBEstadoPerfilEspecial.Focus()
Exit Sub
End If
If (Me.TxtCodigoAsignacion.Text.Length) = 0 Then
MessageBox.Show("Debe ingresar el codigo del sistema correspondiente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.TxtCodigoAsignacion.Focus()
Exit Sub
End If
If (Me.TxtSistemaAsignacion.Text.Length) = 0 Then
MessageBox.Show("Debe ingresar el nombre del sistema.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.TxtSistemaAsignacion.Focus()
Exit Sub
End If

'Recuperar datos del formulario he instanciarlos en un objeto Asignacion de Perfil
Dim perfilEspecial As New CAPA_DTO.Asignacion_Perfil_Especial("", "", "", "", "", "", "")
perfilEspecial._cod_form = Me.TVMenuAsignacion.SelectedNode.Text*********
perfilEspecial._sistema = Trim(CStr(Me.TxtCodigoAsignacion.Text))
perfilEspecial._rut = Trim(CStr(Me.TxtRutAsignacion.Text)) & "-" & Trim(CStr(Me.TxtDigAsignacion.Text))
perfilEspecial._estado = auxNegAsig.getRecuperarIdEstadoPorNombre(Me.CBEsta doPerfilEspecial.SelectedItem)
If Me.CheckInsertar.Checked = True Then
perfilEspecial._insertar = "ACT"
Else
perfilEspecial._insertar = "BLO"
End If

If Me.CheckModificar.Checked = True Then
perfilEspecial._modificar = "ACT"
Else
perfilEspecial._modificar = "BLO"
End If

If Me.CheckEliminar.Checked = True Then
perfilEspecial._eliminar = "ACT"
Else
perfilEspecial._eliminar = "BLO"
End If

Dim auxiliarEspecial As New CAPA_NEGOCIO.Negocio
If Me.getEsNuevo = True Then
auxiliarEspecial.insertaAsignacionPerfilEspecial(p erfilEspecial)
Dim respuesta As Integer = MessageBox.Show("Se ha Asignado un perfil Especial. " & vbLf & "¿Desea Asignar otro Perfil Especial?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If respuesta = vbYes Then
Me.CheckInsertar.Checked = False
Me.CheckModificar.Checked = False
Me.CheckEliminar.Checked = False
Me.CBEstadoPerfilEspecial.Text = ""
Me.TxtRutAsignacion.Enabled = False
Me.TxtDigAsignacion.Enabled = False
Me.TxtSistemaAsignacion.Enabled = False
Me.TxtCodigoAsignacion.Enabled = False
Else
Me.BtnVolver.Enabled = True
Me.BtnPerfil.Enabled = True
Me.BtnNuevo.Enabled = True
Me.BtnGuardar.Enabled = False
Me.BtnBuscar.Enabled = True
Me.TxtRutAsignacion.Enabled = False
Me.TxtDigAsignacion.Enabled = False
Me.TxtCodigoAsignacion.Enabled = False
Me.TxtSistemaAsignacion.Enabled = False
Me.setFila(0)
End If
Else
auxiliarEspecial.modificarAsignacionPerfilEspecial (perfilEspecial._cod_form, perfilEspecial._sistema, perfilEspecial._rut, perfilEspecial._estado, perfilEspecial._insertar, perfilEspecial._modificar, perfilEspecial._eliminar)
MessageBox.Show("Se ha modificado la Asignacion Especial del Usuario.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)
Me.BtnGuardar.Enabled = False
Me.BtnVolver.Enabled = True
Me.BtnNuevo.Enabled = True
Me.BtnBuscar.Enabled = False
Me.TxtRutAsignacion.Enabled = False
Me.TxtDigAsignacion.Enabled = False
Me.TxtSistemaAsignacion.Enabled = False
Me.TxtCodigoAsignacion.Enabled = False

End If
  #15 (permalink)  
Antiguo 17/11/2009, 15:29
Avatar de eperedo  
Fecha de Ingreso: septiembre-2009
Ubicación: Perú
Mensajes: 654
Antigüedad: 14 años, 7 meses
Puntos: 16
Respuesta: Perdida de dato en TextBox

Creo que me perdí...
Cita:
perfilEspecial._cod_form = Me.TVMenuAsignacion.SelectedNode.Text
Supongo que _cod_form es una propiedad o variable y debe tener el texto del nodo seleccionado??
Y qué de malo tiene ese código? Debería funcionar con Me.TVMenuAsignacion.SelectedNode.Text.
Te salta algún error??
__________________
Eduardo Peredo
Wigoin
  #16 (permalink)  
Antiguo 17/11/2009, 15:47
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Perdida de dato en TextBox

SI LO QUE PASA ES QUE AL MOMENTO DE GUARDAR ME DICE
RELACION CON LA PALABRA SISTEMA QUE ES ESTA LINEA DEL TREEVIEW...

' creo un nodo raiz (puede ser cualquier texto como Raíz, Root, etc.)
nodo = TVMenuAsignacion.Nodes.Add("Sistema")

MAS ARRIBA ESTA COMPLETO EL CODIGO

GRACIAS Y ESPERO TU AYUDA
  #17 (permalink)  
Antiguo 17/11/2009, 15:56
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Perdida de dato en TextBox

yA LO SOLUCIONE... YO ESTABA PASANDOLE MAL UN PARAMETRO A LA BASE DE DATOS...

¿TIENES ALGUNA IDEA PARA QUE EN EL TREEVIEW NO SE REPITAN LOS NODOS PADRES?

PORQUE EN MI BD TENGO
1 MENU QUE TIENE TRES FORMULARIOS, QUE EN EL TREEVIEW ME LO DEBERIA MOSTRAR ASI

MENU
..FORM1
..FORM2
..FORM3

PERO ME LO MUESTRA ASI

MENU
..FORM1
..FORM2
..FORM3

MENU
..FORM1
..FORM2
..FORM3

MENU
..FORM1
..FORM2
..FORM3


POR QUE PASA ESTO, EL CODIGO DE COMO CARGO EL TREEVIEEW ESTA MAS ARRIBA

MUCHAS GRACIAS
  #18 (permalink)  
Antiguo 17/11/2009, 17:03
Avatar de eperedo  
Fecha de Ingreso: septiembre-2009
Ubicación: Perú
Mensajes: 654
Antigüedad: 14 años, 7 meses
Puntos: 16
Respuesta: Perdida de dato en TextBox

Pues no logró comprender exactamente en donde es que se repite, lo que te recomendaría es que hagas 2 consultas a la BD, una para llenar los nodos padre y luego para sus hijos

Podría ser así:
Código vb.net:
Ver original
  1. Private Sub cargarNodos()
  2.         Using cn As New SqlConnection("Server=.;database=pruebas;integrated security=true")
  3.             'Consulta para nodos hijos
  4.             Using cmd As New SqlCommand("select m.nombre, f.nombre from formulario as f join menu as m on f.idmenu = m.idmenu", cn)
  5.                 Using da As New SqlDataAdapter(cmd)
  6.                     Dim ds As New DataSet
  7.                     'Crear datatable con los registros para los nodos hijo
  8.                     da.Fill(ds, "hijo")
  9.                     'Consulta nodos padres
  10.                     cmd.CommandText = "select nombre from menu"
  11.                     'Crear datatable con los registros para los nodos padre
  12.                     da.Fill(ds, "padre")
  13.                     'Bucle para llenar nodos padre
  14.                     For Each dr As DataRow In ds.Tables("padre").Rows
  15.                         Me.TreeView1.Nodes.Add(dr(0).ToString(), dr(0).ToString())
  16.                     Next
  17.                     'Bucle para llenar nodos hijo
  18.                     For Each dr As DataRow In ds.Tables("hijo").Rows
  19.                         Me.TreeView1.Nodes(dr(0).ToString()).Nodes.Add(dr(1).ToString())
  20.                     Next
  21.                 End Using
  22.             End Using
  23.         End Using
  24.     End Sub

Suponiendo que tengas 2 tablas, una llamada menu con los campos id y nombre mientras que la otra formulario con sus campos idform, nombre, idmenu.

Como ves primero hago una consulta en la que tengo los nodos hijos y luego una para los padres. El for each para los nodos padre lo agrego con su nombre y un key para luego poder determinar que nodo hijo le corresponde.

Espero no haberte confundido mucho XD
__________________
Eduardo Peredo
Wigoin
  #19 (permalink)  
Antiguo 18/11/2009, 07:46
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Perdida de dato en TextBox

Amido Eduardo, muchas gracias por la ayuda
pero al momento de arrreglar el treeView como lo dices tu

1.
Private Sub cargarNodos()
2.
Using cn As New SqlConnection("Server=.;database=pruebas;integrate d security=true")
3.
'Consulta para nodos hijos
4.
Using cmd As New SqlCommand("select m.nombre, f.nombre from formulario as f join menu as m on f.idmenu = m.idmenu", cn)
5.
Using da As New SqlDataAdapter(cmd)
6.
Dim ds As New DataSet
7.
'Crear datatable con los registros para los nodos hijo
8.
da.Fill(ds, "hijo")
9.
'Consulta nodos padres
10.
cmd.CommandText = "select nombre from menu"
11.
'Crear datatable con los registros para los nodos padre
12.
da.Fill(ds, "padre")
13.
'Bucle para llenar nodos padre
14.
For Each dr As DataRow In ds.Tables("padre").Rows
15.
Me.TreeView1.Nodes.Add(dr(0).ToString(), dr(0).ToString())
16.
Next
17.
'Bucle para llenar nodos hijo
18.
For Each dr As DataRow In ds.Tables("hijo").Rows
19.
Me.TreeView1.Nodes(dr(0).ToString()).Nodes.Add(dr( 1).ToString())
20.
Next
21.
End Using
22.
End Using
23.
End Using
24.
End Sub

da error en el for each, y el error es el siguiente:

Referencia a objeto no establecida como instancia de un objeto

Saludos
  #20 (permalink)  
Antiguo 18/11/2009, 08:15
Avatar de eperedo  
Fecha de Ingreso: septiembre-2009
Ubicación: Perú
Mensajes: 654
Antigüedad: 14 años, 7 meses
Puntos: 16
Respuesta: Perdida de dato en TextBox

Pues que raro, eso está indicando que en el DataSet ds no se encuentra la tabla de nombre "padre".
Te dejo el código entonces, lo he probado en un SQL Server 2000, una base de datos de nombre pruebas con 2 tablas, Menu y formulario. No te olvides de insertar registros en las tablas.

http://rapidshare.com/files/308771621/arbol.zip.html
__________________
Eduardo Peredo
Wigoin
  #21 (permalink)  
Antiguo 18/11/2009, 09:02
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Perdida de dato en TextBox

TU ME DICES ESTO:

Pues que raro, eso está indicando que en el DataSet ds no se encuentra la tabla de nombre "padre".

Y YO NO TENGO NINGUNA TABLA DE NOMBRE PADRE

EL PADRE ES LA TABLA MENU, CON EL CAMPO IDMENU
Y LOS HIJOS SON EL FORMULARIO CON EL CAMPO CODIGO_FORM

Y EN COMUNA TIENE UN CAMPO IDSISTEMA, PORQUE YO CARGO EL ARBOL DE ACUERDO AL IDSISTEMA

POR ESO YO DIGO COMO

For Each dr As DataRow In ds.Tables("padre").Rows
¿Por que padre?

For Each dr As DataRow In ds.Tables("hijo").Rows
¿Por que hijo?


Saludos
  #22 (permalink)  
Antiguo 18/11/2009, 09:15
Avatar de eperedo  
Fecha de Ingreso: septiembre-2009
Ubicación: Perú
Mensajes: 654
Antigüedad: 14 años, 7 meses
Puntos: 16
Respuesta: Perdida de dato en TextBox

No fui del todo claro, no me refería a una tabla de base de datos sino al objeto DataTable.
Código vb.net:
Ver original
  1. da.Fill(ds, "hijo") 'Esto crea un datatable de nombre hijo
  2. da.Fill(ds, "padre") 'Esto crea un datatable de nombre padre
Bien puedes poner en vez de hijo forms, formulario, pepito, juanita o maría, etc.
Y en padre lo mismo puedes poner sistema, papa, padre.... bueno creo que se entendió XD
__________________
Eduardo Peredo
Wigoin
  #23 (permalink)  
Antiguo 18/11/2009, 13:10
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Perdida de dato en TextBox

Ahora te entiendo Eduardo, pero sabes que

aun me arroja el error que te di...

porque sera?

y aun me repite el nodo


Saludos
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 07:41.