Visual Basic.NET - Problemas al llenar un datagridview desde el evento tabcontrol.selectedItemChanged

 
Vista:
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problemas al llenar un datagridview desde el evento tabcontrol.selectedItemChanged

Publicado por María Inés (49 intervenciones) el 20/05/2018 21:15:30
Buenos días a todos!!! Tengo un formulario que tiene un tabcontrol con 4 tabpages. Necesariamente tengo que hacer que al hacer click sobre una tabpage específica me cargue los datos en el datagridview que se aloja en esa tabpage por el hecho de que puede modificarse su contenido si cambia el contenido de las otras tabpages (es por eso que no lo puse en el evento load del form).
Bueno, tengo el procedimiento almacenado en sql, la función creada en una capa en visual y el procedimiento que usa esa función en el form donde necesito que todo esto acontezca.
He probado si la consulta sql, con su función y procedimiento andan poniéndolo en el load del form y anda. He probado también si la manera en que selecciono la tabpage para que se ejecute dicho procedimiento es correcta y lo es (al seleccionarla puse un messagebox y al tocar la tabpage, se ejecuta así que asumí que es correcta esa parte).
Pero cuando intento que si está seleccionada esa tabpage, pues que ejecute ese procedimiento, no me lo hace.
No me doy cuenta dónde me estoy equivocando, por desconocimiento ya que soy principiante en el tema. Aquí les dejo mi código:

La función en la capa donde tengo guardadas las funciones:

Public Function Mostrarestudios()
Try
Conectado()
Cmd = New SqlCommand("Mostrar_Estudios")
Cmd.CommandType = CommandType.StoredProcedure
Cmd.Connection = Cnn
Cmd.Parameters.AddWithValue("@NHC", Convert.ToInt16(Frm_cargaHC2.TEX_NHC.Text))

If Cmd.ExecuteNonQuery Then
Dim dt As New DataTable
Dim da As New SqlDataAdapter(Cmd)
da.Fill(dt)
Return dt
Else
Return Nothing
End If
Catch ex As Exception
MsgBox(ex.Message)
Return Nothing
Finally
Desconectado()
End Try
End Function

Aquí el procedimiento que usa esa función dentro del form donde está el tabcontrol:

Private Sub Mostrarestudios()
Try
Dim func As New FCargapacientes
dt = func.Mostrarestudios()
If dt.Rows.Count <> 0 Then
Dgv_Buscarestudio.DataSource = dt
LAB_Estudios.Visible = False (esta es una etiqueta que muestro en caso que la consulta sql no arroje ningún resultado)
Else
Dgv_Buscarestudio.DataSource = Nothing
LAB_Estudios.Visible = True
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Evento donde pretendo que se ejecute el procedimiento:

Private Sub TAB_HC_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TAB_HC.SelectedIndexChanged
If Me.TAB_HC.SelectedIndex = 3 Then
MessageBox.Show("Seleccionó la tercer página") (esto lo quitaré lo puse para ver si en efecto me seleccionaba la página que yo quería o era este el problema)
Call Mostrarestudiosdelpaciente()
End If
End Sub

Como dije, esto funciona si lo pongo para que se ejecute en el load así que imagino que es un error del procedimiento/función ya que si lo pongo a ejecutar en un botón (al hacer click, como para probar lo hice) tampoco anda. Procuré mandarle el parámetro a la consulta sql porque pensé que era que no tomaba el @NHC ya que no se carga del load. Entonces quité el textbox del Cmd.Parameters de la función y puse Cmd.Parameters.Add("@NHC", SqlDbType.Int).Value = Dts.GNHC y como parámetro Public Function Mostrarestudios(ByVal Dts As VCargapacientes)

y en el procedimiento le envié como parámetro el Dts.GNHC
Private Sub Mostrarestudios()
Try
Dim Dts As New VCargapacientes
Dim func As New FCargapacientes
Dts.GNHC= Convert.ToInt16(TEX_NHC.Text)
dt = func.Mostrarestudios(Dts)
If dt.Rows.Count <> 0 Then
Dgv_Buscarestudio.DataSource = dt
LAB_Estudios.Visible = False
Else
Dgv_Buscarestudio.DataSource = Nothing
LAB_Estudios.Visible = True
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Tampoco anduvo. Y ahí se me acabaron las ideas de qué puedo estar haciendo mal . Se aceptan todas las sugerencias que crean convenientes, ya sea errores de código o cosas que puedo mejorar, ya que como dije, recién arranco y puede que haya mejores maneras de hacer lo que quiero.
Desde ya millón de gracias por aprender siempre tanto de ustedes (ya sea leyéndolos o preguntando como en este caso).
Un saludo!!!

María Inés

PD: estoy desarrollando una aplicación (windowsform) en visual.net 2017, con base de datos en sql server 2017 también.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problemas al llenar un datagridview desde el evento tabcontrol.selectedItemChanged

Publicado por María Inés (49 intervenciones) el 21/05/2018 01:57:21
Les comento, seguí intentando. Hice la función enviando como parámetro el @NHC así:

La función:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Function Mostrarestudios(ByVal Dts As VCargapacientes)
    Try
        Conectado()
        Cmd = New SqlCommand("Mostrar_Estudios")
        Cmd.CommandType = CommandType.StoredProcedure
        Cmd.Connection = Cnn
        Cmd.Parameters.Add("@NHC", SqlDbType.Int).Value = Dts.GNHC
 
        If Cmd.ExecuteNonQuery Then
            Dim dt As New DataTable
            Dim da As New SqlDataAdapter(Cmd)
            da.Fill(dt)
            Return dt
        Else
            Return Nothing
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
        Return Nothing
    Finally
        Desconectado()
    End Try
End Function

y el procedimiento del form

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Mostrarestudios()
    Try
        Dim func As New FCargapacientes
        Dim Dts As New VCargapacientes
        Dts.GNHC = Convert.ToInt16(TEX_NHC.Text)
        dt = func.Mostrarestudios(Dts)
        If dt.Rows.Count <> 0 Then
            Dgv_Buscarestudio.DataSource = dt
            LAB_Estudios.Visible = False
        Else
            Dgv_Buscarestudio.DataSource = Nothing
            LAB_Estudios.Visible = True
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Y este procedimiento lo ejecuté en el click de un botón. Me sucede algo que no entiendo la verdad. Si el BOTÓN lo sitúo en el form (no sobre el TabControl) y hago click cuando aún no he seleccionado la página del Tab que quiero, me carga el Datagridview. Ahora si yo 1ero selecciono la página que quiero y luego hago click en el botón, no me lo carga.
Adicionalmente me pasa que si sitúo ese botón sobre la tabpage donde está el datagrid, tampoco me carga el Datagrid...
Yo el botón no lo quiero, quiero que esto lo haga al seleccionar la tabpage donde se encuentra el datagrid, pero esto lo hice para probar a ver dónde tengo el error y cada vez me desoriento más! No tengo idea por qué pasa esto, tengo problema con los eventos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.323
Plata
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problemas al llenar un datagridview desde el evento tabcontrol.selectedItemChanged

Publicado por Wilfredo Patricio Castillo (620 intervenciones) el 21/05/2018 23:28:42
A ver

Primero, creo que estás trabajando demasiado y a la deriva.

Segundo, tienes una función (Function), que no devuelve nada, por lo tanto no tiene sentido.
Otra cosa, el selectindex empieza en la posición 0.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problemas al llenar un datagridview desde el evento tabcontrol.selectedItemChanged

Publicado por María Inés (49 intervenciones) el 22/05/2018 01:25:01
Muchas gracias Wilfredo por tomarte el tiempo de responder! La función me devuelve el dt que es el datatable que luego mediante el procedimiento del form me llena el datagridview.
Sé que el selectindex arranca de 0, el 3 que puse ahí es porque si es 3 (que vendría a ser el índice de la página del datatable a la que quiero hacer referencia) tiene que cargarme el datagrid que está en esa tabpage.
No digo que no esté mal porque de seguro tienes más experiencia que yo, pero estaba convencida que la función sí me estaba dando un resultado y que el selectindex funciona, puesto que cuando lo hago aparece el mensaje que puse ahí para probar si andaba (eso lo voy a retirar, quería probar si andaba).
Como dije en el 2do comentario, tanto la función como el procedimiento, funcionan si los pongo en el load. El tema es que no lo hacen si lo pongo en el evento que quiero poner que es que "al seleccionar la tabpage3 me cargue el datagrid".
Si me puedes dar más datos sobre cómo hacer mejor las cosas, siempre serán bien recibidos. Saludos para tí también!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problemas al llenar un datagridview desde el evento tabcontrol.selectedItemChanged

Publicado por María Inés (49 intervenciones) el 22/05/2018 04:52:39
Francamente no sé qué edité (seguí haciendo otras cosas) y se ve que algo de lo que edité tenía alguna relación con esto y se solucionó, ahora anda perfecto. Seguramente en un rato me de cuenta qué era, pero aviso para que no se gasten pensando, parece ser que andaba bien después de todo.
Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.323
Plata
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problemas al llenar un datagridview desde el evento tabcontrol.selectedItemChanged

Publicado por Wilfredo Patricio Castillo (620 intervenciones) el 23/05/2018 00:25:13
Que bueno que hayas solucionado, pero yo sigo insistiendo en que tu función no devuelve nada, fíjate

Public Function Mostrarestudios(ByVal Dts As VCargapacientes)


Así es como lo tienes.

Lo que si veo es que recibe un parámetro Dts, pero no está devolviendo nada.

Para que devuelva un datatable tendria que ser así:

Public Function Mostrarestudios(ByVal aqui uin parametro de entrada) as datatable

End function

Si te das cuenta, así si está devolviendo un datatable.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problemas al llenar un datagridview desde el evento tabcontrol.selectedItemChanged

Publicado por María Inés (49 intervenciones) el 23/05/2018 03:01:39
Muchas gracias Wilfredo! No me había dado cuenta de eso, fue de las tantas ediciones que hice cuando pensé que estaba mal la función. Lo que sí te juro no sé todavía dónde estaba el error, asumo en algún punto, letra o semejante. Pero bue, la cosa es que anda y como quiero, se carga al hacer click! A veces de tanto pasar de aquí para allá para ver dónde está el error, es más fácil hacer todo de nuevo.
Muchas gracias por tu tiempo!!! Un saludo!!!
Y felicitarlos porque siempre aprendo mucho de ustedes, aunque no comente o pregunte (sólo lo hago cuando se me queman los papeles!)
Un saludo grande, desde Argentina!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar