none
Necesito ayuda para graduarme por favor

    Pregunta

  • Hola muy buenas ayer me ayudaron a resolver un problema de no volver a ingresar un nuevo item ya existente en un datagridview con este codigo:

    Dim dt As New DataTable
                Dim da As New SqlDataAdapter
    
                Dim conn As String = ConfigurationManager.ConnectionStrings("default").ToString
    
                Using cn As New SqlConnection(conn)
    
                    cn.Open()
    
                    Using cmd As SqlCommand = cn.CreateCommand
    
                        cmd.CommandText = "SELECT CodigoProducto FROM Producto"
    
                        dt = New DataTable
                        da = New SqlDataAdapter(cmd)
                        da.Fill(dt)
    
                    End Using
    
                End Using
    
                    Dim stringCol As New AutoCompleteStringCollection()
    
                Dim existe As Boolean
    
                For Each item As DataRow In dt.Rows
    
                    existe = CType(sender, DataGridView).Rows.OfType(Of DataGridViewRow).
                                   Any(Function(x) CStr(x.Cells("CodigoProducto").Value) = item("CodigoProducto").ToString())
    
                    'Si no existe en el DGV agrega como autocompletado
                    If Not existe Then
                        stringCol.Add(item("CodigoProducto").ToString())
                    End If
    
                Next
    
                Dim comboCol = TryCast(e.Control, TextBox)
                comboCol.AutoCompleteCustomSource = stringCol
                comboCol.AutoCompleteMode = AutoCompleteMode.SuggestAppend
                comboCol.AutoCompleteSource = AutoCompleteSource.CustomSource

    Funciona muy bien ahora el problema es que cuando traigo los datos para actualizar el pedido y quiero agregar un nuevo item al datagrdiview enlazado a datos con los detalles del pedido

    me sale un error

    Para asignar la nueva fila tengo este codigo:

     If DetallePedidoClienteDataGridView.DataSource IsNot Nothing Then
    
                Dim list = TryCast(DetallePedidoClienteDataGridView.DataSource, DataTable)
    
                list.NewRow()
    
                DetallePedidoClienteDataGridView.DataSource = list
    
            End If
    
            DetallePedidoClienteDataGridView.AllowUserToAddRows = True
    
            DetallePedidoClienteDataGridView.AutoGenerateColumns = False

    Espero que alguien me ayude ya que hoy sustente en mi Universidad y no me van a dejar graduar sino corrijo eso...

    Gracias

    viernes, 2 de diciembre de 2016 23:34

Respuestas

  • Hola JOSÉ251288,

    Si vas a crear la nueva fila por código ya no debes de activar la propiedad AllowUserToAddRows.

    Intenta haciendo :

    Dim list = TryCast(DetallePedidoClienteDataGridView.DataSource, DataTable)
    
    If list IsNot Nothing Then
    
        Dim row As DataRow = list.NewRow()
        row("CodigoProducto") = String.Empty
        list.Rows.Add(row)
    
        DetallePedidoClienteDataGridView.DataSource = list
    End If

    Las propiedades siguientes deben de estar deshabilitadas.

    DetallePedidoClienteDataGridView.AllowUserToAddRows = False
    DetallePedidoClienteDataGridView.AutoGenerateColumns = False

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta JOSÉ251288 sábado, 3 de diciembre de 2016 1:02
    sábado, 3 de diciembre de 2016 0:17

Todas las respuestas

  • Hola JOSÉ251288,

    Si vas a crear la nueva fila por código ya no debes de activar la propiedad AllowUserToAddRows.

    Intenta haciendo :

    Dim list = TryCast(DetallePedidoClienteDataGridView.DataSource, DataTable)
    
    If list IsNot Nothing Then
    
        Dim row As DataRow = list.NewRow()
        row("CodigoProducto") = String.Empty
        list.Rows.Add(row)
    
        DetallePedidoClienteDataGridView.DataSource = list
    End If

    Las propiedades siguientes deben de estar deshabilitadas.

    DetallePedidoClienteDataGridView.AllowUserToAddRows = False
    DetallePedidoClienteDataGridView.AutoGenerateColumns = False

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta JOSÉ251288 sábado, 3 de diciembre de 2016 1:02
    sábado, 3 de diciembre de 2016 0:17
  • Muchas gracias por tu ayuda me has salvado la vida porque tenia hasta el lunes para presentar el programa corregido..
    sábado, 3 de diciembre de 2016 1:03