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.
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

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


0