none
Ayuda: ArgumentOutRangeException En dataGridView RRS feed

  • Pregunta

  • Hola buen dia, estoy trabajando con un DatagridView, usando el evento CellValidating y CellEndEdit en los cuales estoy validando la información que ingresa el usuario. El problema esta que cuando intento acceder a el valor de una celda me marca error y si observo el Datasource que tiene asigando el dataGrid, me doy cuenta de que tiene datos, pero si observo en las propiedades del datagrid, no tiene ninguna columna y tampoco filas, no se si puedan ayudarme.

    Esta es la parte que me marca el error.

    Private Sub grdTabulador_CellValidating(sender As System.Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles grdTabulador.CellValidating If Me.grdTabulador.Columns.Count > 2 And e.RowIndex = 0 And Not grdTabulador.Rows(e.RowIndex).IsNewRow And e.ColumnIndex > 1 Then Dim dtTemp As New DataTable() Try dtTemp = CType(Me.grdTabulador.DataSource, DataTable)

    ' Aqui marca el error 'Me.grdTabulador.EndEdit() Catch ex As Exception Me.grdTabulador.DataSource = dtTemp

    ' Aqui tambien marca el error El índice estaba fuera del intervalo.  formateaTabulador() End Try If Not IsDBNull(grdTabulador.Rows(e.RowIndex).Cells(e.ColumnIndex).Value) AndAlso _ Not IsNothing(grdTabulador.Rows(e.RowIndex).Cells(e.ColumnIndex).Value) AndAlso _ Not isNullStr(grdTabulador.Rows(e.RowIndex).Cells(e.ColumnIndex).Value) AndAlso _ grdTabulador.CurrentCell.RowIndex = 0 Then Dim sMonto As String = grdTabulador.Rows(e.RowIndex).Cells(e.ColumnIndex).Value Dim sRango() As String = sMonto.Split("-") If e.ColumnIndex > 1 Then ' Dim sValActual() As String = grdTabulador.Rows(0).Cells(e.ColumnIndex).Value.ToString.Trim.Split("-") Dim iValActualInferior As Decimal = CDec(sValActual(0)) Dim iValActualSuperior As Decimal = 0 If sValActual.Length = 2 Then iValActualSuperior = CDec(sValActual(1)) End If Dim sValAntrior() As String = grdTabulador.Rows(0).Cells(e.ColumnIndex - 1).Value.ToString.Split("-") If sValAntrior.Length <= 1 Then MessageBox.Show("Falta llenar algun rango.", "EsiNet", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) grdTabulador.Rows(e.RowIndex).ErrorText = "No deben quedar rangos sin llenar." Return End If Dim iValAnteriorSuperior As Decimal = CDec(sValAntrior(1)) If iValActualInferior <= iValAnteriorSuperior OrElse (sValActual.Length = 2 AndAlso iValActualSuperior <= iValAnteriorSuperior) Then MessageBox.Show("Los valores deben ser mayores al valor superior del rango anterior.", "EsiNet", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) grdTabulador.Rows(e.RowIndex).ErrorText = "Los valores deben ser mayores al valor superior del rango anterior." e.Cancel = True ElseIf sValActual.Length = 2 AndAlso iValActualInferior >= iValActualSuperior Then MessageBox.Show("El valor superior debe ser mayor que el valor inferior.", "EsiNet", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) grdTabulador.Rows(e.RowIndex).ErrorText = "El valor superior debe ser mayor que el valor inferior." e.Cancel = True End If End If End If End If End Sub



    • Editado JorgeNin92 lunes, 17 de octubre de 2016 16:17
    • Cambiado Enrique M. Montejo jueves, 20 de octubre de 2016 18:28 Pregunta relacionada con controles de Windows Forms.
    lunes, 17 de octubre de 2016 14:39

Respuestas

  • Listo despues de tanto, lo logre solucionar usando el evento RowValidating del DataGridView ya que al usar el Evento CellValidating No me tomaba el ultimo valor editado.
    • Marcado como respuesta JorgeNin92 miércoles, 2 de noviembre de 2016 22:17
    miércoles, 2 de noviembre de 2016 22:17