none
Error al pasar por la primera fila del Datagridview: No se pudo encontrar la columna denominada CODIGO. RRS feed

  • Pregunta

  • Tengo el código de más abajo. el objetivo es asignar a una variable el valor de un campo. Una vez obtenidos los valores de los campos deseados hacer un cálculo y devolver nuevos valores a la tabla origen.

    Los registros de la tabla están en un datagridview en el form. De ahí intento extraer los valores dentro de FOR EACH...NEXT. Al pasar por el primer campo, me da el siguiente error:

    System.ArgumentException
      HResult=0x80070057
      Mensaje = No se pudo encontrar la columna denominada CODIGO.
    Nombre del parámetro: columnName
      Origen = System.Windows.Forms

    El campo "CODIGO" existe, así como los otros campos, de hecho he intercambiado el orden de éstos en el código y me da el mismo error

    ¿Por qué no se reconoce el nombre del campo si este existe y es correcto?

    ¿Qué me falta en el código para que funcione bien?

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim nCod, nNumCuotas, nNumPagos, nReg As Integer
            Dim nValCuota, nDto, nPago, nTotCuota As Double
    
            '1. Actualizar campo NUM_CUOTAS, según TIPOCUOTA, con el valor de la tabla EJERCICIO
            '2. Actualizar NUM_PAGOS a cero
            '3. Recorrer el Datagridview y para cada registro de código de fallero:
            '       Asignar a las variables el valor de: CUOTA, ValorDto, NUM_CUOTAS
            '       Calcular: PAGO, TOTAL_CUOTA (DEUDA=TOTAL_CUOTA)
            '       Actualizar CLIENTE con su TableAdapter.UpdateCuotas(,,,,,)
    
            nNumCuotas = Val(Me.NumcuotasmesTextBox.Text)
            Try
                CLIENTETableAdapter.UpdateNumPagos()  'Pagos a cero
                CLIENTETableAdapter.UpdateNumCuotas(nNumCuotas, "MENSUAL") 'Numero de Cuotas
            Catch ex As Exception
                MsgBox("Error actualización: NUM_CUOTAS/NUM_PAGOS")
            End Try
            nReg = 0
            If CLIENTEDataGridView.Rows.Count > 0 Then
                For Each fila As DataGridViewRow In CLIENTEDataGridView.Rows
                    
                    nCod = fila.Cells("CODIGO").Value
                    nValCuota = fila.Cells("CUOTA").Value
                    nDto = fila.Cells("DESCUENTO").Value
                    nNumPagos = fila.Cells("NUM_PAGOS").Value
                    nPago = nValCuota * (1 – nDto) / 100
                    nTotCuota = nPago * nNumPagos
    
                        Try
                            CLIENTETableAdapter.UpdateCuotas(nValCuota, nNumPagos, nDto, nTotCuota, nTotCuota, nCod)
                        Catch ex As Exception
                            MsgBox("Error en la actualización de Cuotas")
                        End Try
                    
                    If nCod > 5 Then
                        MsgBox("Fin prueba")
                        Exit For
                    End If
                Next
            End If
    


    miércoles, 30 de diciembre de 2020 7:06

Respuestas

  • Gracias por responder.

    La propiedad name de la columna ya está definida en el datagridview, tanto de esta como de las otras. Al menos eso quiero entender, porque el datagridview muestra bien todos los campos y registros

    • Marcado como respuesta Jose Angel ml miércoles, 30 de diciembre de 2020 7:53
    miércoles, 30 de diciembre de 2020 7:53
  • Javier,

    No había caído, pero por tu respuesta:  CLIENTEDataGridView.Columns[0].Name

    Lo que he hecho es cambiar el nombre por el índice de columna:

     nCod = fila.Cells(0).Value

    Y así con el resto.

    Ahora no hay errores y el código trabaja como yo esperaba.

    Muchísimas gracias

    • Marcado como respuesta Jose Angel ml miércoles, 30 de diciembre de 2020 8:50
    miércoles, 30 de diciembre de 2020 8:50

Todas las respuestas

  • ¿Qué valor tiene la propedad Name de esa columna?

    Al crearla defines la propiedad

    Dim dgvCol As New DataGridViewColumn

    dgvCol.Name = "CODIGO"
    dgvCol.DataPropertyName = "CODIGO"
    dgvCol.CellTemplate = New DataGridViewTextBoxCell

    DataGridView1.Columns.Add(dgvCol)


    Saludos, Javier J

    • Propuesto como respuesta Javier Jiménez miércoles, 30 de diciembre de 2020 11:31
    miércoles, 30 de diciembre de 2020 7:46
  • Gracias por responder.

    La propiedad name de la columna ya está definida en el datagridview, tanto de esta como de las otras. Al menos eso quiero entender, porque el datagridview muestra bien todos los campos y registros

    • Marcado como respuesta Jose Angel ml miércoles, 30 de diciembre de 2020 7:53
    miércoles, 30 de diciembre de 2020 7:53
  • La propiedad Name no influye en que se muestren los campos.
    No se si defines las columnas mediante código o desde diseño, pero puedes poner un punto de interrupción en la linea que te marca el error y en la ventana de comandos ejecutar

    ? CLIENTEDataGridView.Columns[0].Name

    He puesto la columna de índice cero pero será el índice que tenga la columna en cuestión.

    Así comprobarás el nombre que tiene esa columna.


    Saludos, Javier J

    • Propuesto como respuesta Javier Jiménez miércoles, 30 de diciembre de 2020 11:31
    miércoles, 30 de diciembre de 2020 8:29
  • Javier,

    No había caído, pero por tu respuesta:  CLIENTEDataGridView.Columns[0].Name

    Lo que he hecho es cambiar el nombre por el índice de columna:

     nCod = fila.Cells(0).Value

    Y así con el resto.

    Ahora no hay errores y el código trabaja como yo esperaba.

    Muchísimas gracias

    • Marcado como respuesta Jose Angel ml miércoles, 30 de diciembre de 2020 8:50
    miércoles, 30 de diciembre de 2020 8:50
  • Hola José Ángel,

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada.

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    miércoles, 30 de diciembre de 2020 15:06
    Moderador