none
Ayuda con un combobox en un datagridview RRS feed

  • Pregunta

  • Buenos dias

    Podrian ayudarme en llenar un datagridview con un combobox el problema es que al llenar los datos pues como que el datagrid view detecta la cantidad totales de row pero no me muestra informacion alguna. El modo de llenarlo lo tome de este tutorial http://ltuttini.blogspot.mx/2010/01/datagridview-parte-4-uso-del.html

    Esto es lo que me muestra al ejecutarse

    Les envio el codigo

    Private Sub LoadTareasTbl()
                    Try
                           Dim comboboxColumn As DataGridViewComboBoxColumn = TryCast(dgvInstr.Columns("Subsistema"), DataGridViewComboBoxColumn)
                comboboxColumn.DataSource = TareasDAL.GetAllTareas()
                comboboxColumn.DisplayMember = "Subsistema"
                comboboxColumn.ValueMember = "Id"
                '
                'bindeo los datos del subsistema al las celdas
                '
                dgvInstr.AutoGenerateColumns = False
                dgvInstr.DataSource = TareasDAL.GetAllTareas()
            Catch ex As Exception
                MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical)
            End Try
        End Sub

    mi clase para cargar los datos de la misma:

    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Configuration
    Imports System.Text
    Imports System.Data.SqlClient
    Imports System.Data
    Public NotInheritable Class TareasDAL
        Private Sub New()
        End Sub
        Public Shared Function GetAllTareas() As List(Of TareasEntity)
            Dim sql As String = "SELECT [ID]" & _
                                ",[Subsistema]" & _
                                ",[Tarea]" & _
                                ",[Quien]" & _
                                ",[Frecuencia]" & _
                                ",[Frec_Time] " & _
                                "FROM TareasMaster " & _
                                "WHERE Linea=@Linea AND Equipo=@Equipo"
            Dim list As New List(Of TareasEntity)()
            sqlConn.Open()
            sqlCmd = New SqlClient.SqlCommand(sql, sqlConn)
            sqlCmd.Parameters.AddWithValue("@Linea", MttoTarea.cboTarLin.Text.ToString)
            sqlCmd.Parameters.AddWithValue("@Equipo", MttoTarea.cboTarEqu.Text.ToString)
            Dim reader As SqlDataReader = sqlCmd.ExecuteReader()
            While reader.read()
                list.add(LoadTarea(reader))
            End While
            sqlConn.Close()
            Return list
        End Function
        Private Shared Function LoadTarea(reader As IDataReader) As TareasEntity
            Dim Tarea As New TareasEntity
            Tarea.Id = Convert.ToInt32(reader("Id"))
            Tarea.Subsistema = Convert.ToString(reader("Subsistema"))
            Tarea.Frecuencia = Convert.ToString(reader("Frecuencia"))
            Tarea.Tarea = Convert.ToString(reader("Tarea"))
            Tarea.Frec_Time = Convert.ToString(reader("Frec_Time"))
            Tarea.Quien = Convert.ToString(reader("Quien"))
            Return Tarea
        End Function
    End Class

    Y la clase de TareasEntity

    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Text
    Public Class TareasEntity
        Public Property Id() As Integer
            Get
                Return m_Id
            End Get
            Set(value As Integer)
                m_Id = value
            End Set
        End Property
        Private m_Id As Integer
        Public Property Subsistema() As String
            Get
                Return m_Subsistema
            End Get
            Set(value As String)
                m_Subsistema = value
            End Set
        End Property
        Private m_Subsistema As String
        Public Property Frecuencia() As String
            Get
                Return m_Frecuencia
            End Get
            Set(value As String)
                m_Subsistema = value
            End Set
        End Property
        Private m_Frecuencia As String
        Public Property Tarea() As String
            Get
                Return m_Tarea
            End Get
            Set(value As String)
                m_Tarea = value
            End Set
        End Property
        Private m_Tarea As String
        Public Property Frec_Time() As String
            Get
                Return m_Frec_Time
            End Get
            Set(value As String)
                m_Frec_Time = value
            End Set
        End Property
        Private m_Frec_Time As String
        Public Property Quien() As String
            Get
                Return m_Quien
            End Get
            Set(value As String)
                m_Quien = value
            End Set
        End Property
        Private m_Quien As String
    End Class
    Gracias por su ayuda y saludos

    • Cambiado Enrique M. Montejo viernes, 26 de septiembre de 2014 14:42 Pregunta relacionada con el acceso a datos.
    viernes, 26 de julio de 2013 16:09

Todas las respuestas

  • aqui tienes un fallito

    Public Property Frecuencia() As String
           
    Get
               
    Return m_Frecuencia
           
    End Get
           
    Set(value As String)
                m_Subsistema
    = value
           
    End Set
       
    End Property
    En el set no debería ser m_Frecuencia?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    viernes, 26 de julio de 2013 16:28
  • de todas formas creo que tienes un error de concepto. Debes primero cargar lis combos con los posibles valores que puedan tomar, o sea que deberías hacer un método GetAllSubsistemas(),GetAllFrecuencia(),..etc. Una vez cargados los combos ya si que harías el GetAllTareas() para enlazar los datos

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    viernes, 26 de julio de 2013 16:36
  • hola

    como es que para cargar tanto el combo como el grid utulizas la misma funcionalidad TareasDAL.GetAllTareas()

    no deberias cargar unos datos en el grid y otra entidad en el combo?

    si pones un breakpoit aqui

    Return list

    puedes validar que la lista se carga ?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 26 de julio de 2013 16:38
  • Encontre otro metodo

        Private Sub LoadTareasTbl()
            Dim TarStr As String = ""
            Try
                TarStr = "SELECT ID,Subsistema,Tarea,Quien,Frecuencia,Frec_Time FROM TareasMaster WHERE Linea=@Linea AND Equipo=@Equipo"
                sqlConn.Open()
                sqlCmd = New SqlClient.SqlCommand(TarStr, sqlConn)
                sqlCmd.Parameters.AddWithValue("@Linea", cboTarLin.Text.ToString)
                sqlCmd.Parameters.AddWithValue("@Equipo", cboTarEqu.Text.ToString)
                sqlAdap = New SqlClient.SqlDataAdapter(sqlCmd)
                sqlDS.Clear()
                sqlAdap.Fill(sqlDS, "SubTareas")
                dgvInstr.DataSource = sqlDS.Tables("SubTareas")
                Dim cboSubsistema As New DataGridViewComboBoxColumn
                Dim cboFrecuencia As New DataGridViewComboBoxColumn
                Dim cboQuien As New DataGridViewComboBoxColumn
                cboSubsistema.DataSource = sqlDS.Tables("SubTareas")
                cboSubsistema.HeaderText = "Subsistema"
                cboSubsistema.DisplayMember = "Subsistema"
                cboSubsistema.DataPropertyName = "Id"
                cboSubsistema.ValueMember = "Id"
                dgvInstr.Columns.Add(cboSubsistema)
                'DelDupl(cboSubsistema)
                cboFrecuencia.DataSource = sqlDS.Tables("SubTareas")
                cboFrecuencia.HeaderText = "Frecuencia"
                cboFrecuencia.DisplayMember = "Frecuencia"
                cboFrecuencia.DataPropertyName = "Id"
                cboFrecuencia.ValueMember = "Id"
                dgvInstr.Columns.Add(cboFrecuencia)
                'DelDupl(cboFrecuencia)
                cboQuien.DataSource = sqlDS.Tables("SubTareas")
                cboQuien.HeaderText = "Quien"
                cboQuien.DisplayMember = "Quien"
                cboQuien.DataPropertyName = "Id"
                cboQuien.ValueMember = "Id"
                
                dgvInstr.Columns.Add(cboQuien)
                'DelDupl(cboQuien)
                sqlConn.Close()
            Catch ex As Exception
                MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical)
            Finally
                sqlConn.Close()
            End Try
        End Sub

    Solo que ahora me salen datos duplicados en cuanto doy click en algun combo box

    Gracias por su ayuda

    viernes, 26 de julio de 2013 19:54
  • Puedes verificar una cosa? Puedes contar los elementos que hsy en ese combo que muestras? Apuesto lo que sea que tienen el mismo número de lementos que registros tienes en el grid.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    viernes, 26 de julio de 2013 20:15
  • Lo que me refiero es que el dtasource del combo por ejemplo           

      cboFrecuencia.DataSource = sqlDS.Tables("SubTareas")


    Tienes que crear un datatable o dataset solo con los registros de tu tabla de Frecuencias (supongo que tienes una) Y asignarlo al combo


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    viernes, 26 de julio de 2013 20:19
  • Hice algo como esto pero me marca error al ejecutarlo

     Private Sub LoadTareasTbl()
            Dim TarStr As String = ""
            Try
                TarStr = "SELECT ID,Subsistema,Tarea,Quien,Frecuencia,Frec_Time FROM TareasMaster WHERE Linea=@Linea AND Equipo=@Equipo"
                sqlConn.Open()
                sqlCmd = New SqlClient.SqlCommand(TarStr, sqlConn)
                sqlCmd.Parameters.AddWithValue("@Linea", cboTarLin.Text.ToString)
                sqlCmd.Parameters.AddWithValue("@Equipo", cboTarEqu.Text.ToString)
                sqlAdap = New SqlClient.SqlDataAdapter(sqlCmd)
                sqlDS.Clear()
                sqlAdap.Fill(sqlDS, "SubTareas")
                dgvInstr.DataSource = sqlDS.Tables("SubTareas")
                Dim cboSubsistema As New DataGridViewComboBoxColumn
                Dim cboFrecuencia As New DataGridViewComboBoxColumn
                Dim cboQuien As New DataGridViewComboBoxColumn
                ListarSubsistema()
                cboSubsistema.DataSource = sqlDS.Tables("LoadSub")
                cboSubsistema.HeaderText = "Subsistema"
                cboSubsistema.DisplayMember = "Subsistema"
                cboSubsistema.DataPropertyName = "Id"
                cboSubsistema.ValueMember = "Id"
                dgvInstr.Columns.Add(cboSubsistema)
                ListarFrecuencia()
                cboFrecuencia.DataSource = sqlDS.Tables("LoadFrec")
                cboFrecuencia.HeaderText = "Frecuencia"
                cboFrecuencia.DisplayMember = "Frecuencia"
                cboFrecuencia.DataPropertyName = "Id"
                cboFrecuencia.ValueMember = "Id"
                dgvInstr.Columns.Add(cboFrecuencia)
                ListarQuien()
                cboQuien.DataSource = sqlDS.Tables("LoadQuien")
                cboQuien.HeaderText = "Quien"
                cboQuien.DisplayMember = "Quien"
                cboQuien.DataPropertyName = "Id"
                cboQuien.ValueMember = "Id"
                dgvInstr.Columns.Add(cboQuien)
                dgvInstr.Columns.Remove("Subsistema")
                dgvInstr.Columns.Remove("Quien")
                dgvInstr.Columns.Remove("Frecuencia")
                sqlConn.Close()
            Catch ex As Exception
                MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical)
            Finally
                sqlConn.Close()
            End Try
        End Sub
        Private Sub ListarSubsistema()
            Dim sqlStr As String = ""
            Try
                sqlStr = "SELECT DISTINCT Id, Subsistema FROM TareasMaster WHERE Linea=@Linea AND Equipo=@Equipo"
                sqlConn.Open()
                sqlCmd = New SqlClient.SqlCommand(sqlStr, sqlConn)
                sqlCmd.Parameters.AddWithValue("@Linea", cboTarLin.Text.ToString)
                sqlCmd.Parameters.AddWithValue("@Equipo", cboTarEqu.Text.ToString)
                sqlAdap = New SqlClient.SqlDataAdapter(sqlCmd)
                sqlDS.Clear()
                sqlAdap.Fill(sqlDS, "LoadSub")
                dgvInstr.DataSource = sqlDS.Tables("LoadSub")
                sqlConn.Close()
            Catch ex As Exception
                MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical)
            Finally
                sqlConn.Close()
            End Try
        End Sub
        Private Sub ListarFrecuencia()
            Dim sqlStr As String = ""
            Try
                sqlStr = "SELECT DISTINCT Id, Frecuencia FROM TareasMaster WHERE Linea=@Linea AND Equipo=@Equipo"
                sqlConn.Open()
                sqlCmd = New SqlClient.SqlCommand(sqlStr, sqlConn)
                sqlCmd.Parameters.AddWithValue("@Linea", cboTarLin.Text.ToString)
                sqlCmd.Parameters.AddWithValue("@Equipo", cboTarEqu.Text.ToString)
                sqlAdap = New SqlClient.SqlDataAdapter(sqlCmd)
                sqlDS.Clear()
                sqlAdap.Fill(sqlDS, "LoadFrec")
                dgvInstr.DataSource = sqlDS.Tables("LoadFrec")
                sqlConn.Close()
            Catch ex As Exception
                MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical)
            Finally
                sqlConn.Close()
            End Try
        End Sub
        Private Sub ListarQuien()
            Dim sqlStr As String = ""
            Try
                sqlStr = "SELECT DISTINCT Id, Quien FROM TareasMaster WHERE Linea=@Linea AND Equipo=@Equipo"
                sqlConn.Open()
                sqlCmd = New SqlClient.SqlCommand(sqlStr, sqlConn)
                sqlCmd.Parameters.AddWithValue("@Linea", cboTarLin.Text.ToString)
                sqlCmd.Parameters.AddWithValue("@Equipo", cboTarEqu.Text.ToString)
                sqlAdap = New SqlClient.SqlDataAdapter(sqlCmd)
                sqlDS.Clear()
                sqlAdap.Fill(sqlDS, "LoadQuien")
                dgvInstr.DataSource = sqlDS.Tables("LoadQuien")
                sqlConn.Close()
            Catch ex As Exception
                MsgBox("Error:" & ex.Message, MsgBoxStyle.Critical)
            Finally
                sqlConn.Close()
            End Try
        End Sub

    viernes, 26 de julio de 2013 20:58