none
VB.net Seleccionar opcion de combobox con datos repetidos de Base de datos y mostrar datos relacionados en Textbox RRS feed

  • Pregunta

  • Hola a todos!!!

    Soy un nuevo desarrollador de Visual Basic, de manera que aun no soy un experto, y me gustaria que pudieran ayudarme con un problema que tengo en cuanto a un programa que estoy desarrollando.

    El programa esta asociado con una base de datos en SQLServer y bueno, lo que trato de hacer es que tengo un combobox asociado a uno de los campos de una tabla de la base de datos la cual carga datos para seleccionarlos desde el combobox, y despues tengo un textbox en el que dependiendo de que cada vez que se cambie el valor de la seleccion del combobox me aparezca la informacion de otro campo en especifico. Esta es la ventana en donde tengo los elementos:

    Como  se abran dado cuenta, en este formulario se va a reallizar el registro de informacion en una tabla de la base de datos, solo que el combobox va a mostrar informacion de un campo de otra tabla ya llenada, y esta a su vez va a mostrar informacion de otro campo del mismo registro con la seleccion del combobox. El problema que tengo es que los datos repetidos que son un mismo grupo al haber 2 o mas registros con el num-grupo, cada vez que cambio a un registro repetido siempre me manda al primer registro.

    Este es mi codigo que utilizo con respecto a las funciones, este es del formulario que utilizo, aqui unicamente mando a llamar a las funciones que utilizo:

    Public Class v0224RegMaterias
    
        Private Sub btn01Back_v0224_Click(sender As Object, e As EventArgs) Handles btn01Back_v0224.Click
            Me.Close()
            v02Menu.Enabled = True
    
        End Sub
    
        Private Sub v0224RegMaterias_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
            v02Menu.Enabled = True
        End Sub
    
        Private Sub btn02Reg_v0224_Click(sender As Object, e As EventArgs) Handles btn02Reg_v0224.Click
            registro_Materias()
        End Sub
    
        Private Sub v0224RegMaterias_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            llenarCmb_RegMaterias()
        End Sub
    
        Private Sub cmb01Grupo_v0224_SelectedValueChanged(sender As Object, e As EventArgs) Handles cmb01Grupo_v0224.SelectedValueChanged
    
            llenarTxt_RegMaterias()
    
        End Sub
    End Class

    Y en este otro es sobre las funciones que utilizo para la base de datos, como ven todo esta en un modulo:

    Module mod02FuncBaseDatos

    ' conexion Public conex As New SqlClient.SqlConnection("integrated security=SSPI;" & _ "data source=PC-UZUMAKI\SQLEXPRESS;persist security info=False;" & _ "Initial Catalog=UABC_DatHorarioFinal01") Public sql_string As String = "" Public cmd_sql As New SqlClient.SqlCommand Public dreader As SqlClient.SqlDataReader Dim dtset As New DataSet Dim dttable As New DataTable Public dadapter As New SqlClient.SqlDataAdapter(sql_string, conex) Public Sub registro_Materias() If v0224RegMaterias.txt01ClavMat_v0224.Text = "" Or v0224RegMaterias.txt02Mater_v0224.Text = "" Or v0224RegMaterias.cmb01Grupo_v0224.SelectedItem = "" Then ' el ultimo txt de la ventana no ocupa condicionamiento ya que se llenara 'automaticamente cuando se seleccione un valor del combobox de grupo MsgBox("Tienes que selecionar una opción en cada uno de las opciones antes presentadas", MsgBoxStyle.Information) Else Dim clavMateria As Integer Dim materia As String = "" Dim noGrupo As Integer Dim turno As String = "" clavMateria = Integer.Parse(v0224RegMaterias.txt01ClavMat_v0224.Text) materia = v0224RegMaterias.txt02Mater_v0224.Text noGrupo = Integer.Parse(v0224RegMaterias.cmb01Grupo_v0224.SelectedItem) turno = v0224RegMaterias.txt03Turno_v0224.Text MsgBox(clavMateria + materia + noGrupo + turno) cmd_sql.CommandType = CommandType.Text cmd_sql.Connection = conex sql_string = "insert into materias values (" & clavMateria & ",'" & materia & "'," & noGrupo & ",'" & turno & "');" MsgBox(sql_string) cmd_sql.CommandText = sql_string Try cmd_sql.ExecuteNonQuery() MsgBox("Exito en registro", MsgBoxStyle.Information) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical) End Try End If End Sub Public turno_RegMaterias As String = "" Public Sub llenarCmb_RegMaterias() v0224RegMaterias.cmb01Grupo_v0224.Items.Clear() sql_string = "select no_grupo,id_grupo from grupos" cmd_sql.CommandType = CommandType.Text cmd_sql.Connection = conex cmd_sql.CommandText = sql_string Try dreader = cmd_sql.ExecuteReader() If dreader.HasRows Then While dreader.Read() v0224RegMaterias.cmb01Grupo_v0224.Items.Add(dreader.GetValue(0)) 'MsgBox(dreader.GetValue(1)) End While End If dreader.Close() Catch ex As Exception MsgBox(ex.Message) End Try End Sub Public Sub llenarTxt_RegMaterias() Dim dt As DataTable = New DataTable("Tabla") Dim dr As DataRow dt.Columns.Add("Codigo") dt.Columns.Add("Turno") sql_string = "select turno_grupo,id_grupo from grupos where no_grupo=" + v0224RegMaterias.cmb01Grupo_v0224.SelectedItem.ToString + ";" cmd_sql.CommandType = CommandType.Text cmd_sql.Connection = conex cmd_sql.CommandText = sql_string 'MsgBox(sql_string) Try dreader = cmd_sql.ExecuteReader() If dreader.HasRows Then While dreader.Read() dr = dt.NewRow() dr("Codigo") = dreader.GetValue(1) dt.Rows.Add(dr) dr = dt.NewRow() dr("Turno") = dreader.GetValue(0) dt.Rows.Add(dr) v0224RegMaterias.txt03Turno_v0224.Text = dr("Turno") MsgBox(dreader.GetValue(1).ToString) End While 'v0224RegMaterias.txt03Turno_v0224.Text = dreader.GetValue(0) End If dreader.Close() Catch ex As Exception MsgBox(ex.Message) End Try End Sub End Module

    Como veran al final tuve que utilizar un DataTable y DataRow para poder usar el cambio al textbox, de otra forma me estaria marcando error, pero bueno , eso ya lo solucione, el problema que tengo es ahora este, espero y puedan ayudarme. Muchas gracias

    DISCULPEN X NO PUBLICAR EL FORMEN UNA IMAGEN PERO NO ME DEJO!!!! ME MARCO ESTO "El texto del cuerpo no puede contener imágenes ni vínculos hasta que podamos verificar su cuenta.

    miércoles, 20 de mayo de 2015 8:10

Todas las respuestas

  • Saludos:

    Si quieres usar el control TextBox, ve a propiedades y cambia la propiedad MULTILINE a true.

    Otro control que puedes usar es el RichTextbox.

    Espero ayude.

    JOSE LUIS


    Dios NO los llamo LAS DIEZ RECOMENDACIONES

    miércoles, 20 de mayo de 2015 15:20
  • Jose Luis, intente el uso de multiline para los valores que se le van a dar al textbox  pero no funciono, tambien dudo que llegue a funcionar con el Ritchtextbox. Mi problema sigue sin ser solucionado. Estoy seguro que es algo en el codigo lo que esta fallando de hecho intente cambiar parte del coigo del que creí que me da problemas. Es esta parte: 

      dreader = cmd_sql.ExecuteReader()
                If dreader.HasRows Then
                    While dreader.Read()
    
                        dr = dt.NewRow()
                        dr("Codigo") = dreader.GetValue(1)
                        dt.Rows.Add(dr)
    
                        dr = dt.NewRow()
                        dr("Turno") = dreader.GetValue(0)
                        dt.Rows.Add(dr)
                        v0224RegMaterias.txt03Turno_v0224.Text = dr("Turno")
                        MsgBox(dreader.GetValue(1).ToString)
    

    Aqui solo cambie el ciclo while por el condicional if para que no me mostrara los dos valores de turno (matutino/vespertino) en el textbox de un mismo grupo al cambiar de opcion del combobox una sola ves, y de cierta forma eso funciono!!!... Pero resulta que ahora solo me mostraba Uno de los 2 registros del mismo grupo, y ese mismo registro se repetia 2 veces en el combobox al seleccionar las opciones !!! Tal vez la solucion sea rear una condicion pero fuera de esa estructura del if inicial o hacer una funcion aparte pero no se me ocurre nada popr el momento... ojala puedan ayudarme!!!! :(....

    Aqui les mando el codigo como lo cambie como les habia comentado anteriormente, solo cambie el ciclo if por el while!!!

      dreader = cmd_sql.ExecuteReader()
                If dreader.HasRows Then
                    If dreader.Read() Then
    
    
    
                        dr = dt.NewRow()
                        dr("Codigo") = dreader.GetValue(1)
                        dt.Rows.Add(dr)
    
                        dr = dt.NewRow()
                        dr("Turno") = dreader.GetValue(0)
                        dt.Rows.Add(dr)
                        v0224RegMaterias.txt03Turno_v0224.Text = dr("Turno")
                        MsgBox(dreader.GetValue(1).ToString)
    
    
                    End If



    jueves, 21 de mayo de 2015 16:32